2011-04-19 20 views
3

我有一個小對話框出現,在這個框架內有一系列按鈕和一個文本框。 我需要框架能夠檢測到用戶何時將焦點放在屏幕上的其他任何東西上(除了框架及其組件外的任何東西),所以我可以關閉框架。 有關如何解決此問題的任何建議?我幾個小時一直在努力解決焦點問題,但沒有解決方案!在鞦韆上檢測焦點(框架+組件)

回答

4

需要的框架,以便能夠檢測用戶何時已經把重點放在別的屏幕

使用的WindowListener上偵聽的windowDeactivated。

+0

這完美的作品!謝謝! :d – kazoo 2011-04-19 15:34:16

1

監聽KeyboardFocusManager屬性「permanentFocusOwner」的屬性更改。在收到通知時,檢查新的focusOwner是否在框架下的子層次結構中,如果沒有 - 關閉框架。

編輯:看到提示Window/StateListener的答案 - 它們比我的頂級窗口更好:-)監聽keyboardFocusManager是深層次下的容器的一個好方法,實現f.i. JTable中的CellEditorRemover(來決定,如果一個掛起的編輯應終止)

5

嘗試使用WindowStateListener

的WindowEvent參數提供可以告訴你,如果該窗口已通過getNewState()方法失去焦點。

class MyFocusLostListener implements WindowStateListener { 

    public void windowStateChanged(WindowEvent e) { 
     if (e.getNewState() == WindowEvent.WINDOW_LOST_FOCUS) { 
      e.getWindow().setVisible(false); 
     } 
    } 
}