Dialoge mit ESCAPE schließen

jayrich

Grünschnabel
Hallo,

ich bin auf der Suche nach einer Möglichkeit alle Dialoge (JDialog) in meinem Programm mit ESCAPE schließen zu können, ohne den einzelnen Dialogen nen KeyListener zu verpassen oder eine super-Klasse zu schreiben, die den KeyListener für alle implementiert.

Ich habe herausgefunden, dass man den OptionPanes verbieten kann bei ESCAPE zu schließen, mit Hilfe des UIManagers. Gibt es in der Richtung vielleicht etwas?


Danke.

Juliane
 
Hallo,

schau mal hier:
Java:
/**
 * 
 */
package de.tutorials;

import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;

/**
 * @author thomas.darimont
 * 
 */
public class JDialogClosingExample extends JFrame {

    public JDialogClosingExample() {
        super("JDialogClosingExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new GridLayout(3, 1));
        add(createButtonForDialog("Dialog1"));
        add(createButtonForDialog("Dialog2"));
        add(createButtonForDialog("Dialog3"));

        Toolkit.getDefaultToolkit().getSystemEventQueue().push(
                new EventQueue() {
                    @Override
                    protected void dispatchEvent(AWTEvent event) {
                        if (event instanceof KeyEvent) {
                            KeyEvent keyEvent = (KeyEvent) event;
                            if (KeyEvent.KEY_RELEASED == keyEvent.getID()
                                    && KeyEvent.VK_ESCAPE == keyEvent
                                            .getKeyCode()
                                    && keyEvent.getSource() instanceof JDialog) {
                                ((JDialog) keyEvent.getSource()).dispose();
                            }
                        }
                        super.dispatchEvent(event);
                    }
                });

        pack();
        setVisible(true);
    }

    private Component createButtonForDialog(final String string) {
        JButton btn = new JButton(string);
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                new BubuDialog(JDialogClosingExample.this, string)
                        .setVisible(true);
            }

        });
        return btn;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        new JDialogClosingExample();
    }

    static class BubuDialog extends JDialog {
        public BubuDialog(JFrame parent, String title) {
            super(parent, title);
        }
    }
}

Gruß Tom
 
Zurück