Swing KeyEvents für JDialog / JFrame

Status
Nicht offen für weitere Antworten.

KrokoDiehl

Top Contributor
Hallo zusammen.
Ich habe ein (hoffentlich kleines) Problem, bei dem mir nur komplexe Lösungen einfallen. Aber zuerst einmal zu Problem selbst:
Ich habe einen Dialog (soll später auch mal für das Hauptfenster, einen
Code:
JFrame
gehen, aber das ist tertiär), der via ESC geschlossen werden kann (gleiche Wirkung wie das Fenster-X). Dies soll immer so sein, gleich welche Komponente den Fokus hat.

Ich habe es bisher über die
Code:
InputMap
gelöst, was zumindest ansatzweise funktioniert:
Java:
public MyDialog(String title) //extends JDialog
{
    super(title);
    //übrige Initialisierungen

    this.getRootPane().getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "closeWindow");
    this.getRootPane().getActionMap().put("closeWindow", new AbstractAction()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            closeWindow();
        }
    });
}
( [c]closeWindow()[/c] ruft erstmal nur [c]setVisible(false)[/c] auf)
Das geht solange prima, bis ich den Fokus in irgendeine Komponente setze, dann nämlich schluckt diese die ESC-Taste.
Meine bisher einzige Lösung: Jede Komponente bekommt einen weiteren KeyListener welcher ESC abermals prüft. Das führt allerdings bei Tabellen zu wenig Erfolg, weswegen ich da nochmals separat ESC behandeln müsste.

In Kürze: Gibt es für solche Fälle eine direktere Lösung in Swing?
 
Probiers mal einfach so:
Java:
getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben