Swing: how do I close a dialog when the ESC key is pressed?

前端 未结 5 1295
春和景丽
春和景丽 2020-12-24 00:52

GUI development with Swing.

I have a custom dialog for choosing a file to be opened in my application; its class extends javax.swing.JDialog and contain

5条回答
  •  粉色の甜心
    2020-12-24 01:04

    Use InputMap and ActionMap for dealing with key actions in Swing. To close the dialog cleanly, send a window closing event to it.

    From my weblog:

    private static final KeyStroke escapeStroke = 
        KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); 
    public static final String dispatchWindowClosingActionMapKey = 
        "com.spodding.tackline.dispatch:WINDOW_CLOSING"; 
    public static void installEscapeCloseOperation(final JDialog dialog) { 
        Action dispatchClosing = new AbstractAction() { 
            public void actionPerformed(ActionEvent event) { 
                dialog.dispatchEvent(new WindowEvent( 
                    dialog, WindowEvent.WINDOW_CLOSING 
                )); 
            } 
        }; 
        JRootPane root = dialog.getRootPane(); 
        root.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( 
            escapeStroke, dispatchWindowClosingActionMapKey 
        ); 
        root.getActionMap().put( dispatchWindowClosingActionMapKey, dispatchClosing 
        ); 
    }
    

提交回复
热议问题