2013-11-15 49 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