# Wörter zählen JTextarea



## realo (20. Feb 2007)

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


----------



## DP (20. Feb 2007)

machste nach jedem tastenschlag eine überprüfung der stringlänge und gibst nur zeichen 0-100 wieder aus.


----------



## realo (20. Feb 2007)

Ich bin absoluter Neuling. 
Wie kann ich nach jedem tastenschlag eine überprüfung machen?

Kannst du mir ein kleines Beispeil zeigen?  

Danke im Voraus.


----------



## André Uhres (20. Feb 2007)

realo hat gesagt.:
			
		

> Wörter zählen JTextarea


http://www.java-forum.org/de/userfiles/user3690/WordcountDemo.java


----------



## realo (21. Feb 2007)

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


----------



## André Uhres (21. Feb 2007)

realo hat gesagt.:
			
		

> ..Das TextArea ist ein ULCTextArea mit den genau gleichen Eigenschaften wie ein JTextArea..


Das kann man wohl kaum so sagen.
Eine Möglichkeit wäre bei ULC-developer mal nachzufragen.


----------



## unknown_member (21. Feb 2007)

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.


----------



## DP (21. Feb 2007)

mach mal lieber key released


----------



## unknown_member (21. Feb 2007)

Ja, hab ich beim Programmieren auch gemerkt, wie gesagt, ich progs jetzt.


----------



## DP (21. Feb 2007)

:applaus:


----------



## unknown_member (21. Feb 2007)

Aber eine Frage hätte ich noch: Wie kann man von Strings eine bestimmte Anzahl von Buchstaben abziehen?


----------



## realo (21. Feb 2007)

Ich hab das Problem mit KeyListener gelöst.

Hier der Code der Klasse:

```
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:

```
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!


----------



## unknown_member (21. Feb 2007)

Och, ich hab meins grad fertiggekriegt. Ach, ich posts trotzdem mal:


```
// 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


----------



## DP (21. Feb 2007)

unknown_member hat gesagt.:
			
		

> ```
> import java.io.*;
> import java.awt.*;
> import java.awt.event.*;
> ...



er soll doch kein swing benutzen


----------



## unknown_member (21. Feb 2007)

ups!


----------



## realo (21. Feb 2007)

Habe jetzt die beiden Code kombiniert und es läuft hervorragend!!

thx a lot!  :applaus:


----------



## DP (21. Feb 2007)

bitte den thread abharken


----------



## unknown_member (22. Feb 2007)

hihi! Hat mein Codeschnipselchen doch ein bisschen geholfen... :wink: 

Und abgeharkt ist der Thread immer noch nicht!


----------



## André Uhres (22. Feb 2007)

unknown_member hat gesagt.:
			
		

> ..Hat mein Codeschnipselchen doch ein bisschen geholfen..


Du bildest dir ein, mit dem anderen Code sei deiner gemeint  :shock:


----------



## unknown_member (22. Feb 2007)

Welcher denn sonst? Der auf der Site? Wenn ja, tuts mir leid...


----------



## realo (22. Feb 2007)

*@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:


----------



## André Uhres (22. Feb 2007)

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.


----------

