JDialog mit ESC schliessen

Auch wenn dieser Thread schon alt ist, kann folgender Code auch Helfen:



(Ich hatte mit anderen evt. eleganteren Lösungen nur Probleme)

Code:
public final class Helper {
    public static void addKeyListenerALL(KeyListener kl, Component[] comps) {
        for(int i = 0; i < comps.length; i++) {
            comps[i].addKeyListener(kl);
            if(comps[i] instanceof Container && ((Container)        comps[i]).getComponents().length != 0)
                addKeyListenerALL(kl,((Container) comps[i]).getComponents());
        }
    }
}

Und Zum Aufrufen:
Code:
public class InternalFrameGUI extends javax.swing.JInternalFrame {
    public InternalFrameGUI() {
        Helper.addKeyListenerALL(new ESCListener(this), this.getComponents());
    }
}

Und Mein KeyListener:
Code:
public class ESCListener implements KeyListener {

    JInternalFrame iframe;
    JFrame frame;
    JDialog dialog;
    
    public ESCListener(JInternalFrame frame) {
        this.iframe = frame;
    }
    
    public ESCListener(JFrame frame) {
        this.frame = frame;
    }
    
    public ESCListener(JDialog frame) {
        this.dialog = frame;
    }
    
    public void keyTyped(KeyEvent e) {
    }

    public void keyPressed(KeyEvent e) {
      if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
         if(iframe != null) iframe.dispose();
         if(frame != null) frame.dispose();
         if(dialog != null) dialog.dispose();
      }
    }

    public void keyReleased(KeyEvent e) {
    }

}

Vielleicht hilft das jemanden in der Zukunft...
 
Zurück