如上, 具体点是我打开一个弹出窗口, 窗口上有多个可以接收焦点的组件, 但是不管焦点在哪个组件上, 我只有按下ESC便可以将这个弹出窗口关闭, 这个怎么实现??

解决方案 »

  1.   

    建一个新的侦听,就是捕捉键盘按键,如果是ESC的键值,则关闭。然后在每一个组件上都加上这个监听的动作就行了。
      

  2.   

    答:
    当然有啦,否则这样加,还不累死人啊.
    方法是:向窗口中某一个组件注册一个击键处理,要求是WHEN_IN_FOCUSED_WINDOW就行了.
    代码:jButton.registerKeyboardAction(actionListener,
                                        KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE),
                                        JComponent.WHEN_IN_FOCUSED_WINDOW);
    这样,当组件jButton拥有焦点或jButton没有焦点但与它处于同一个窗口中的任何其它组件所有焦点时,都可调用这个actionListener(即:事件处理的那个对象)