Wörter zählen JTextarea

Status
Nicht offen für weitere Antworten.

realo

Mitglied
Hallo alle zusammen,

ich bin an einem Punkt angelangt wo ich nicht mehr weiter weiss. :cry:

Das Problem sieht folgender massen aus.

Ich habe ein JTextarea. Die anzahl der Buchstaben in diesem JTextarea darf nicht mehr als 100 Zeichen betragen.
Wie kann ich dynamisch verhindern, dass der Benutzer nicht mehr als 100 Zeichen eingeben kann?

Am liebsten wärs mir, wenn neben dem Textarea die Anzahl der noch zu eingebenden Buchstaben angezeigt würde.

Besten Dank
 
machste nach jedem tastenschlag eine überprüfung der stringlänge und gibst nur zeichen 0-100 wieder aus.
 
Ich bin absoluter Neuling.
Wie kann ich nach jedem tastenschlag eine überprüfung machen?

Kannst du mir ein kleines Beispeil zeigen? 😳

Danke im Voraus.
 
Ich kann das Beispiel nicht anwenden, da ich ULC(Ultra Light Client) verwende und keine Swing komponente importieren darf. Also ich kann keine Klassen verwenden die von PlainDocument ableiten.

Das TextArea ist ein ULCTextArea mit den genau gleichen Eigenschaften wie ein JTextArea.
Gibt es andere Möglichkeiten die Eingabe vom Benutzer zu begrenzen?

Besten Dank
 
Vielleicht per KeyPressed abfragen, ob eine Taste gedrückt wurde. Wenn eine gedrückt wurde, einem Integer 1 abziehen, der angezeigt wird. Und wenn der 0 ist, den letzten Buchstaben wieder löschen.

Warte kurz, ich glaub, ich prog dir mal ein Beispiel.
 
Ich hab das Problem mit KeyListener gelöst.

Hier der Code der Klasse:
Code:
public class LimitTextArea
    implements IKeyListener
{
    private ULCTextArea textArea;
    private int maxLength;

    public LimitTextArea(ULCTextArea textArea, int maxLength)
    {
        this.textArea = textArea;
        this.maxLength = maxLength;
    }

    public void keyTyped(KeyEvent event)
    {
        String text = textArea.getText();
        int length = text.length();
        if (length > maxLength)
        {
            textArea.setText(text.substring(0, maxLength));
        }
    }
}

Hier der Aufruf:
Code:
myTextArea.addKeyListener(new LimitTextArea(myTextArea, 40));

Denkt daran, dass es sich hier um ULC(Ultra Light Client) handelt. Wenn Ihr den Code für Swing verwendet wollt, dann die ULC Komponenten mit Swing Komponenten ersetzen.

Danke für eure Antworten!
 
Och, ich hab meins grad fertiggekriegt. Ach, ich posts trotzdem mal:

Code:
// EntryTextField.java



import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.swing.*;


public class EntryTextField extends JFrame
   implements ActionListener, KeyListener {

   private JPanel           gui;
   private JPanel      textfeld;

   private JButton             close;
   private JTextField           text;
   private JLabel             countA;
   private JButton               neu;

   private int                 count;
   private int                count2;
   
   private String            derText;


   public static void main(String [] args) throws IOException {

    EntryTextField go = new EntryTextField();
    go.setTitle("Nur 100 Buchstaben");
    go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    go.setSize(500,250);
    go.setResizable(false);
    go.setVisible(true);
    }


  EntryTextField() {
    makeGui();
  }


   public void makeGui() {

  gui      = new JPanel();
  textfeld = new JPanel();


  close = new JButton("Fenster schließen");
  close.addActionListener(this);
  gui.add(close);


  add(BorderLayout.SOUTH,gui);


  text = new JTextField("", 40);
  text.addKeyListener(this);
  textfeld.add(text);
  
  countA = new JLabel("100 Zeichen verbleibend");
  textfeld.add(countA);
  
  neu = new JButton("Neu");
  neu.addActionListener(this);
  textfeld.add(neu);
  neu.setVisible(false);

  add(BorderLayout.CENTER,textfeld);

}



   public void actionPerformed(ActionEvent event) {

      if (event.getSource() == close) {
       System.exit(0);
      }
      
      if (event.getSource() == neu) {
       text.setText("");
       text.setEditable(true);
       
       neu.setVisible(false);
       
       countA.setText("100 Zeichen verbleibend");
      }
      
   }
      
   public void keyReleased(KeyEvent ev) {

   if (ev.getSource() == text) {
   
     derText = text.getText();
     count2 = derText.length();
     
     count = 100 - count2;
     
     countA.setText(count + " Zeichen verbleibend");
     
     }
     
   if (ev.getSource() == text && count == 0) {

     Toolkit tk = Toolkit.getDefaultToolkit();
     tk.beep();
     
     text.setEditable(false);

     neu.setVisible(true);
    }

   }
   public void keyPressed(KeyEvent ev) { }
   public void keyTyped(KeyEvent ev) { }
}



Ist natürlich noch nicht perfekt mit dem "Neu"-Button, aber ein Anfang.


_____
MfG, unknown_member
 
unknown_member hat gesagt.:
Code:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.swing.*;

er soll doch kein swing benutzen 😉
 
@unknown_member
Natürlich war dein Code gemeint!

Das ganze wurde dann noch komplizierter.
Ich musste nicht die Stringlänge des TextArea begrenzen, sondern die Stringlänge einzelner Zeilen im TextArea. :? :roll:

Danke trotzdem für dein Code! :applaus:
 
Bitte verwende In Zukunft aussagekräftige Titel!
http://www.java-forum.org/de/viewtopic.php?p=249526#249526


Der Titel "Wörter zählen JTextarea" ist ziemlich unglücklich gewählt:
Der Thread behandelt weder Wörter noch JTextArea noch irgendeine andere Swingkomponente.

Und bitte markiere das Problem in diesem Thema als gelöst indem du auf den runden Button
mit dem Häkchen hier unten links klickst. Vielen Dank.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben