JTextField auslesen, wenn Enter gedrückt..

  • Themenstarter Themenstarter KlapptNich
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
K

KlapptNich

Gast
hi!

Ich bin dabei mich mit Keylistener-Events auseinander zu setzen und möchte ein JTextField dazu bringen, seinen Inhalt jedes Mal auszugeben, wenn die Enter-Taste gedrückt wurde.

Allerdings funktioniert die Sache bei mir nicht, es hakt bei mir wie immer daran, dass ich nicht weiss von wo nach wo ich denken muss 😉

So sieht der Teilcode aus, ich kann vom Inneren der keyPressed Methode nicht auf das Objekt zugreifen.. Was ist mein Denkfehler?

Java:
text.addKeyListener(new KeyListener()	{ //text ist ein JTextField
	        public void keyTyped(KeyEvent e) {}
	        public void keyReleased(KeyEvent e) {}
	        public void keyPressed(KeyEvent e) {
                     int key = e.getKeyCode();

                     if (key == KeyEvent.VK_ENTER) {         
                     String inhalt = text.getText();                    //hier kann ich nicht auf text zugreifen
}}
  		});
 
Danke, das hat mich schon weitergebracht!

Leider bringt mich das auf das neue Problem: wenn ich den String inhalt lokal erstelle kann ich auf anderer Stelle nicht auf ihn zugreifen, wenn ich ihn global mache, dann meckert Eclipse,

"The final local variable inhalt cannot be assigned, since it is defined in an enclosing type"
 
Java:
wenn ich ihn global mache, dann meckert Eclipse,

diesen solltest du dann nicht final machen !
 
Er müsste den String final machen, um ihn im Listener verwenden zu können. Aber wenn er final ist, dann kann man ihm nichts mehr zuweisen. Eine Möglichkeit wäre, den String als Attribut in die Klasse aufzunehmen, dann wäre beides möglich.

Aber das Bedürfnis den String innerhalb der Methode und innerhalb des Listeners zu verwenden, deutet waage auf einen konzeptionellen Fehler hin.
 
Das möchte Eclipse aber, weil wenn er nich final is, sagt es mir es kann nich auf eine nicht-final variable zugreifen...
 
Eine Möglichkeit wäre, den String als Attribut in die Klasse aufzunehmen, dann wäre beides möglich.

äh, ist das dann nicht global? deswegen sagte ich ja, wenn es eine klassenvariable ist, muss er das final weglassen! sonst kann er ihr sie da nicht zuweisen!

javimka hat gesagt.:
Er müsste den String final machen, um ihn im Listener verwenden zu können.
? der string input ist doch im listener deklariert...er will ihn jetzt aber auch ausserhalb irgendwo nutzen. ?!?!
 
Zuletzt bearbeitet:
das mit dem konzeptionellen Fehler kann sehr gut möglich sein, ich habe bei dem gesamten Programm Probleme zu verstehen was an welcher Stelle stehen soll...

Wie sollte man dieses Problem denn sonst lösen?
 
Wieso muss denn dein String überhaupt ausserhalb des Listeners sichtbar sein? Für eine bestimmte Methode in der Klasse? Dann übergibst du den String besser als Argument.
 
Also im Endeffekt soll der String an einen Socket übergeben werden (Also im Netzwerk übertragen)
Das kann ich mit einer while-Schleife machen, aber dann habe ich dummerweise 100%CPU Nutzung 😉

darum wollte ich die Übertragungen etwas intelligenter machen und nur dann etwas übertragen wenn eben Enter gedrückt wurde
 
Das ist natürlich schon richtig, aber mach doch eine Methode sendString(String text), die dann den String text durchs Netzwerk sendet. Dann kannst du im Listener sendString(inhalt) aufrufen und der String wird gesendet.
 
Ganz unkompliziert geht es, in dem man einfach einen ActionListener ans Textfeld hängt.
Durch Drücken auf die ENTER-Taste wird das ActionEvent dann ausgelöst, wenn das Textfeld den Fokus hat.

Java:
String input = null;
final JTextField tf = new JTextField();
tf.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    input = tf.getText();
  }
});
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben