KeyEvent Enter verbinden mit Action Event

blackrose4me

Grünschnabel
Guten Abend Leute :)

Ich hätte do mal ein Problem...Google-Suche nicht wirklich erfolgreich, Umsetzung noch nicht 100%ig geglückt.

Es geht darum:
Ich habe ein TextField (EingabeFenster) und ein TextArea (AusgabeFenster) inkl eines Absende-Buttons (ButtonEnter).
Da es umständlich ist für den User immer den Button zu betätigen, möchte ich, dass man nach der Eingabe im TextField über Enter den Text ins TextArea, also dem Ausgabe-Fenster übergeben kann.

Mein Problem:
Erkennen kann zwar mein TextField das man Enter gedrückt hat (testausgabe über System.out.println), jedoch sobald ich sage dass wenn Enter gedrückt ist, er den Text übergeben soll, meckert mein Compiler. Habe schon einige Versuche gestartet, aber geholfen hat es nicht.

Ich möchte das hier...
PHP:
    String textAusgabeFenster = this.AusgabeFenster.getText();
    String textEingabeFenster = this.EingabeFenster.getText();
    this.EingabeFenster.setText("");
    this.AusgabeFenster.setText(textAusgabeFenster+username+":\t"+textEingabeFenster+"\n");

in meinem KeyEvent integrieren...
PHP:
    this.EingabeFenster.addKeyListener
    (new KeyAdapter()
    {
      public void keyPressed(KeyEvent e)
      {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_ENTER)
        {
           System.out.println("Enter pressed");
        }
      }
    }
    );

Nur wenn ich das in die if-Schleife packe...

PHP:
    this.EingabeFenster.addKeyListener
    (new KeyAdapter()
    {
      public void keyPressed(KeyEvent e)
      {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_ENTER)
        {
           String textAusgabeFenster = this.AusgabeFenster.getText();
           String textEingabeFenster = this.EingabeFenster.getText();
           this.EingabeFenster.setText("");
           this.AusgabeFenster.setText(textAusgabeFenster+username+":\t"+textEingabeFenster+"\n");
           System.out.println("Enter pressed");
        }
      }
    }
    );

... dann meckert er und gibt mir folgendes aus...
No accessible field named "EingabeFenster" was found in type "start$2".

Könnt ihr mir vllt weiterhelfen :confused:
 

zeja

Erfahrenes Mitglied
Da du sowohl beim Enter drücken, als auch beim Button drücken das selbe machen willst, pack doch den Code bitte in eine eigene Methode.

Du brauchst dann in beiden Listener-Implementierungen nur noch deine Methode aufrufen:
Java:
this.EingabeFenster.addKeyListener
    (new KeyAdapter()
    {
      public void keyPressed(KeyEvent e)
      {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_ENTER)
        {
           doSend();
        }
      }
    }
    );  

button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
   doSend();
}
});

Java:
private void doSend(){
String textAusgabeFenster = this.AusgabeFenster.getText();
    String textEingabeFenster = this.EingabeFenster.getText();
    this.EingabeFenster.setText("");
    this.AusgabeFenster.setText(textAusgabeFenster+username+":\t"+textEingabeFenster+"\n");  
}

Code kopieren ist nie richtig. Wenn du an zwei Stellen das selbe machen willst, dann nimm den Code der das umsetzt und pack ihn in eine eigene Methode. Es ist sonst sehr unschön wenn man was ändern möchte und dass dann ein zwei Stellen tun muß.

Zwei Anmerkungen noch:
- Es gibt keine if-Schleifen... das sind if-Blöcke
- Die Namen von Feldern spllten in Java mit kleinem Anfangsbuchstaben beginnen

Achso zur Erklärung der Fehlermeldung: Du befindest dich mit deinem Code in einer anonymen Klasse und nicht mehr in deiner eigentlichen Klasse. In dieser anonymen Klasse sind die Felder deiner eigentlichen Klasse natürlich nicht mit this zugreifbar.
 

blackrose4me

Grünschnabel
Wollte mich herzlich bei dir bedanken :) Es funktioniert.

Hatte total verpeilt, das man es so lösen kann, ...langsam kehrt die Erinnerung wieder =)

Sry, hast Recht, meinte If-Blöcke, war nur eben noch im Gedanken ^^