KeyListener auf JFrame

anti43

Grünschnabel
Hi!
Ich versuche, meinen JFrame mit dem ESC Key zu schliessen.. leider passiert hier nichts:

Code:
      final JFrame window = new JFrame();
        window.getContentPane().setLayout(new BorderLayout());
        window.getContentPane().add(content, BorderLayout.CENTER);
        window.pack();
        window.setAlwaysOnTop(true);
        window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        window.addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent e) {
              if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    window.dispose();
                }
            }
            public void keyPressed(KeyEvent e) {}
            public void keyReleased(KeyEvent e) {
              
            }
        });

Hab ich bei dem KeyListener was falsch verstanden?

Danke schonmal!

Gruss,

Andreas
 
Also bei mir funktioniert es so, sofern ich

"window.getContentPane().add(content, BorderLayout.CENTER);" auskommentiere.
window.setVisible(true); einfüge
window.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
window.dispose();
}
}
}); ändere.

Versuche es mal mit window.setVisible(false); (weiß garnicht was der Unterschied ist), und prüfe ob du eh die JRE 6 (1.6) installiert hast.
 
In "keyTyped" ist die Rückgabe von "getKeyCode" immer VK_UNDEFINIED, d.h. du musst es in die "keyPressed" oder "KeyReleased" Methode packen, wie Kai schon schrieb. "keyPressed" wird aufgerufen sobald du eine taste drückst, "keyReleased" sobald du eine Taste los lässt. Dazwischen wird ein "keyTyped" abgesetzt.
Dass die Rückgabe von "getKeyCode" in "keyTyped" immer undefinied ist, liegt daran, dass diese Methode dazu dient zB Shift+A abzufangen.

Zudem solltest du einen KeyAdapter nutzen anstatt der Instanz des KeyListeners, dann musst du nur die Methode überschrieben, die du brauchst und hast nicht die 2 leeren Methoden, wie in deinem Beispielcode.

Zudem solltest du prüfen ob er überhaupt in deine IF-Abfrage hineingeht (vielleciht mit einem System.out.print) , wenn ja liegt der Fehler sicher an window.dispose, andernfalls am KeyListener selbst.
 
hm, irgendwie habe ich den Eindruck, mein Frame empfängt den keypressed was auch immer ich benutze- nicht. Echt seltsam. Irgendwie gibt es keine key Events egal wie ich auf das Keyboard hämmere ;-)
 
hm, hat er aber, ich kann ja reintippen (in den content (textarea)), und ich verwende window.setAlwaysOnTop(true);

evt liegts ja am ganzen code:

Code:
    public static void showPopup(JComponent parent, JPanel content) {
        final JFrame window = new JFrame();
        window.getContentPane().setLayout(new BorderLayout());
        window.getContentPane().add(content, BorderLayout.CENTER);
        window.pack();
        window.setAlwaysOnTop(true);
        window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        window.addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent e) {
            }
            public void keyPressed(KeyEvent e) {
               if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    window.dispose();
                }}
            public void keyReleased(KeyEvent e) {
              
            }
        });

        window.setVisible(true);

    }
 

Neue Beiträge

Zurück