2010-06-24 408 views
1

嗨我的Java應用程序中只有一個JDialog框。如果它失去焦點,我想使它不可見。 我試過不同的方法,但沒有能夠觸發任何窗口焦點事件。這裏是我的代碼:當窗口失去焦點時隱藏JDialog窗口

public void windowGainedFocus(WindowEvent e) { 
    System.out.println("gained focus"); 
    } 

    public void windowLostFocus(WindowEvent e) { 
    System.out.println("lost focus"); 
    } 

回答

2

響應焦點事件可能非常棘手。我的經驗幾乎是任何時候有人試圖做非標準的事情,他們最終會後悔。其中最重要的是,它並不是所有的便攜設備 - 許多基於X-Windows的顯示器都使用focus-follow-mouse,這會導致焦點在您不期望的時候被轉移,從而導致提前解僱你的對話。

這就是說,Sun的官方教程在這裏:http://java.sun.com/docs/books/tutorial/uiswing/misc/focus.html。如果我沒有記錯,您可以將一個PropertyChangeListener附加到KeyboardFocusManager,並且會針對焦點更改而觸發:http://java.sun.com/javase/6/docs/api/java/awt/KeyboardFocusManager.html#addPropertyChangeListener%28java.beans.PropertyChangeListener%29

+0

我會告訴更多關於我的問題。 我正在使用Linux系統。我有一個jEditPane的JDialog盒子。該窗口具有固定大小。當焦點丟失時,我想把這個窗口最小化爲托盤。 – Joe 2010-06-24 10:57:03

+0

以下建議的WindowListeners似乎很有效。 我的直覺是,這最終會讓很多用戶感到有些惱火。你有沒有考慮過把它放在一個固定大小的JWindow中,然後當用戶不需要它時讓它最小化呢? – Curtis 2010-06-24 14:32:24

1

使用WindowListener並處理windowDeactivated事件。