2013-11-15 48 views
0

我在几个论坛中发现此代码以关闭ESC按键上的框架。但是,我很困惑重新在哪里把这个代码在ESC按下关闭java框架

KeyStroke escape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false); 
Action action = new AbstractAction() { 
public void actionPerformed(ActionEvent e) { 
    jDesktopPane1.getSelectedFrame().dispose(); 
    } 
}; 
jDesktopPane1.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
escape,"escape"); 
jDesktopPane1.getActionMap().put("escape", action); 

任何帮助将不胜感激。

+0

那么,你需要的JDesktopPane中的引用,所以为什么当你创建你的JDesktopPane不这样做呢? – camickr

回答

0

无论你初始化jDesktopPane1,你都可以把它放在后面,它将它绑定到它。如果您的窗格有一个init()方法,请将它放在那里以便绑定。

+0

-1,30分钟前已建议。 – camickr

-2

我们必须向框架中的java组件添加一个关键侦听器。或者在你的情况下jdesktoppane。 举一个例子框架的构造,

this.addKeyAdapter(
    new KeyAdapter(){ 
     public void keyPressed(KeyEvent e){ 
      if(e.getKeyChar()==VK_ESCAPE) 
       this.dispose(); 
     } 
}); 
+1

-1,不需要将KeyListener添加到组件。这是一种选择,但这是在Swing存在之前完成的一个糟糕的选择。如果事实上这种方法在许多情况下都不起作用,因为KeyEvent只传递给具有焦点的组件,所以您需要将KeyListener添加到框架上的每个组件。 Swing使用键绑定这是首选方法。 – camickr