2010-11-20 81 views
1

我在使用和JFrame編寫基於Java Swing的程序,能夠顯示系統托盤圖標以便快速訪問最常用的功能。現在我想爲用戶添加一個選項,以選擇當程序窗口最小化時是否應顯示正常(Windows)任務欄圖標。Howto動態啓用或禁用Java Swing程序的任務欄圖標

Google的搜索告訴我可以使用JDialog代替JFrame。不幸的是,這不是一個好的解決方案,因爲我想根據用戶的決定動態地啓用或禁用任務欄圖標。

這是可能的嗎?

感謝和親切的問候,Matthias

回答

0

需要嘗試的東西,雖然我不完全確定這會起作用,因爲它在這裏很晚,我可能會考慮這種方法是錯誤的。

當您最小化一個窗口時,會觸發一個事件,您想要做的是通過向監視WINDOW_ICONIFIED和WINDOW_DEICONIFIED的JFrame添加一個WindowStateListener來捕獲它。當WINDOW_ICONIFIED發生時,將JFrame的visible屬性設置爲false;當WINDOW_DEICONIFIED設置爲true時。將幀可見性設置爲false的快速測試似乎將其從任務欄中刪除,您只需確定它是否確實可以工作,然後再實現狀態列表器即可。

這裏是我用來測試

import java.awt.*; 

public class FrameTest 
{ 
    public static void main (String args[]) throws Exception 
    { 
     // Create a test frame 
     Frame frame = new Frame("Hello"); 
     frame.add (new Label("Minimize demo")); 
     frame.pack(); 

     // Show the frame 
     frame.setVisible (true); 

     // Sleep for 5 seconds, then minimize 
     Thread.sleep (5000); 
     frame.setState (Frame.ICONIFIED); 
     frame.setVisible(false); 
     // Sleep for 5 seconds, then restore 
     Thread.sleep (5000); 
     frame.setState (Frame.NORMAL); 
     frame.setVisible(true); 

     // Sleep for 5 seconds, then kill window 
     Thread.sleep (5000); 
     frame.setVisible (false); 
     frame.dispose(); 

     // Terminate test 
     System.exit(0); 
    } 
} 
+0

這裏的問題代碼,在這種情況下,如果被最小化窗口的JFrame仍然有任務欄中的圖標,是不是?但是,我希望wo在窗口最小化的時候從任務欄中刪除整個圖標(條目)... – Matthias 2010-11-20 18:21:23

+0

我剛剛試過這個,我已經坐在它周圍的一箇舊程序,它的工作。我將jframes可見性屬性設置爲false,即。 frame.setVisible(假);它不再出現在任務欄中。要做到這一點最小化,你需要聽一個狀態改變,這是不同的,然後我說(我的1.4之前),但它很容易查找。當你恢復窗口,你只需setVisible(true),你很好再次去。 – phill 2010-11-20 19:20:27

+0

好的,我會試一試,謝謝! – Matthias 2010-11-20 23:34:29

2

JDialog或JFrame只是一個容器。他們之間切換不適合你的情況?當您需要切換時,只需創建一個設置爲相同位置和大小的其他類型的新實例,然後移動contentPane即可。

相關問題