当一个对话框处于激活状态时,当安下ESC键时,对话框dispose或Hide。
这该如何实现呢?
我试图用键绑定的方式来让ESC键和一个退出行为的Action绑定。
dialog.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).
          put(KeyStroke.getKeyStroke("esc"),"disposeDialog");
dialog.getActionMap().put("disposeDialog",disposeAction);
但是当dialog处于激活状态时我按下ESC键,此时disposeAction并没有被使用大家觉得我应该怎么做呢?
麻烦大家看看该怎样做才对呢?
上面的代码问题在哪儿 呢?
谢谢!

解决方案 »

  1.   

    addKeyListener(new KeyAdapter(){
    public void keyPressed(KeyEvent e){
    if(e.getKeyCode()==e.VK_ESCAPE){
    dispose();
    System.exit(0);}
    }
    });
      

  2.   

    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.KeyEvent;import javax.swing.*;public class T {
    public static void main(String args[]) {
    final JFrame f = new JFrame();

    JButton btn = new JButton(new AbstractAction() {
    { putValue(NAME, "ShowDialog"); } public void actionPerformed(ActionEvent e) {
    final JDialog dialog = new JDialog(f, "Dialog", true);
    AbstractAction disposeAction = new AbstractAction() {
    public void actionPerformed(ActionEvent e) {
    dialog.dispose();
    }
    };

    JPanel contentPane = (JPanel) dialog.getContentPane();
    contentPane.setFocusable(true);
    contentPane.add(new JButton("Hello"));
    contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).
        put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),"disposeDialog");
    contentPane.getActionMap().put("disposeDialog", disposeAction);

    dialog.setSize(100, 100);
    dialog.setLocationRelativeTo(f);
    dialog.setVisible(true);
    dialog.dispose();
    }
    });
    f.getContentPane().add(btn, BorderLayout.CENTER);
    //f.setSize(800, 600);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    }