KeyListener um Variable runter zu zählen

MaximaxXx

Mitglied
Hallo,
ich möchte gerne nach jedem Zeichen dass ich meine TextArea eingegeben wird eine int Variable um 1 herunterzählen. Ich vermute das dies am besten mit einem KeyListener um gesetzt werden kann. Es soll sich später so wie die Zahl auf der Twitter Seite verhalten. Sprich es fängt bei 140 an und wird bei jedem eingegeben Zeichen in meine TextArea um 1 dekrementiert und dann der neue Wert wieder auf der Gui angezeigt. Sprich 140 --> eingabe --> 139 --> eingabe ... usw.

Kann mir einer helfen und mir sagen wie ich den KeyListener am besten einbauen sollte?

Viele Grüße Max
 
Hallo,

ich würde wieder den DocumentListener nehmen. Wie ich schon bei dem letzten Thread von dir erwähnte, der KeyListener reagiert nicht auf Copy/Paste mit der Maus, dann würde es nicht mehr den richtigen Wert anzeigen.

Java:
class MyDocumentListener implements DocumentListener{

	private int availableTextLength;
	
	public int getAvailableTextLength() {
		return availableTextLength;
	}
	
	private void calculateAvailableTextLength(int count) {
		availableTextLength = 140 - count;
	}

	@Override
	public void changedUpdate(DocumentEvent e) {
		calculateAvailableTextLength(e.getDocument().getLength(););
		
	}


	@Override
	public void insertUpdate(DocumentEvent e) {
		calculateAvailableTextLength(e.getDocument().getLength(););
		
	}

	@Override
	public void removeUpdate(DocumentEvent e) {
		calculateAvailableTextLength(e.getDocument().getLength(););
		
	}
	
}

Gruß

Sascha
 
Okay Danke.
Ich habe die Klasse nun implementiert und mit mytextarea.getDocument().addDocumentListener(new MyDocumentListener()); an die textare geklebt wie kann ich aber nun meine variable manipulieren damit bei jedem eingegeben zeichen auch meine variabel runtergezählt wird und ich sie auf der gui aktualisieren kann damit dem nutzer on the fly angezeigt wird wie viele zeichen er noch zur verfügung hat
 
Du musst die nicht manipulieren, du kannst eigentlich von dieser Klasse den Wert einfach abfragen. Ich hab doch extra eine Variable reingepackt, die du Abfragen kannst.

Java:
MyDocumentListener dl = new MyDocumentListener();
int nochZurVerfuegung = dl.getAvailableTextLength();

Gruß

Sascha
 
Du musst die nicht manipulieren, du kannst eigentlich von dieser Klasse den Wert einfach abfragen. Ich hab doch extra eine Variable reingepackt, die du Abfragen kannst.

Java:
MyDocumentListener dl = new MyDocumentListener();
int nochZurVerfuegung = dl.getAvailableTextLength();

Gruß

Sascha
Herzlichen Dank.

Nun gibt sich mir aber das Problem, dass ich die Zahl nicht ordentlich auf die Swing -Gui bekomme. Ich versuche derzeit:
Code:
final JTextArea tweet = new JTextArea();
        TweetCounter einTweetCounter = new TweetCounter();
        tweet.getDocument().addDocumentListener(einTweetCounter);
        String count = "";
        int i = einTweetCounter.getAvailableTextLength();
        count.valueOf(i);
        final JLabel counterLabel = new JLabel(count);

Jedoch sehe ich die Zahl nicht. Woran kann es liegen?
 
Zuletzt bearbeitet von einem Moderator:
Hey, wär vielleicht gut, wenn du etwas mehr von deinem Code posten könntest, z.B. den Teil wo du die Oberfläche initialisierst.
Das du den Text nicht siehst, liegt daran, dass du das counterLabel noch nirgendwo auf deine Oberfläche hinzugefügt hast. Aber du das hinzufügungen des Textfeldes auc nicht in dem Codeschnipsel steht, vermute ich, dass das an anderer Stelle steht.
So wie du es momentan machen würdest wäre es sowieso nicht korrekt, denn dann würde nur einmal beim erzeugen des JLabels der aktuelle Counter ausgegeben. Du willst vermutlich, dass der Counter beim ändern des Textes auch aktualisiert wird. Dazu musst du die calculateAvailableTextLength deiner Klasse TweetCounter erweitern. Und zwar muss da noch sowas wie
Java:
counterLabel.setText(new Integer(getAvailibleTextLength()).toString());
Natürlich musst du das JLabel vorher erstellen und deiner Oberfläche hinzufügen, genauso wie du es mit dem JTextField gemacht hast.
 
Zurück