我在使用和JFrame編寫基於Java Swing的程序,能夠顯示系統托盤圖標以便快速訪問最常用的功能。現在我想爲用戶添加一個選項,以選擇當程序窗口最小化時是否應顯示正常(Windows)任務欄圖標。Howto動態啓用或禁用Java Swing程序的任務欄圖標
Google的搜索告訴我可以使用JDialog代替JFrame。不幸的是,這不是一個好的解決方案,因爲我想根據用戶的決定動態地啓用或禁用任務欄圖標。
這是可能的嗎?
感謝和親切的問候,Matthias
我在使用和JFrame編寫基於Java Swing的程序,能夠顯示系統托盤圖標以便快速訪問最常用的功能。現在我想爲用戶添加一個選項,以選擇當程序窗口最小化時是否應顯示正常(Windows)任務欄圖標。Howto動態啓用或禁用Java Swing程序的任務欄圖標
Google的搜索告訴我可以使用JDialog代替JFrame。不幸的是,這不是一個好的解決方案,因爲我想根據用戶的決定動態地啓用或禁用任務欄圖標。
這是可能的嗎?
感謝和親切的問候,Matthias
需要嘗試的東西,雖然我不完全確定這會起作用,因爲它在這裏很晚,我可能會考慮這種方法是錯誤的。
當您最小化一個窗口時,會觸發一個事件,您想要做的是通過向監視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);
}
}
JDialog或JFrame只是一個容器。他們之間切換不適合你的情況?當您需要切換時,只需創建一個設置爲相同位置和大小的其他類型的新實例,然後移動contentPane即可。
這裏的問題代碼,在這種情況下,如果被最小化窗口的JFrame仍然有任務欄中的圖標,是不是?但是,我希望wo在窗口最小化的時候從任務欄中刪除整個圖標(條目)... – Matthias 2010-11-20 18:21:23
我剛剛試過這個,我已經坐在它周圍的一箇舊程序,它的工作。我將jframes可見性屬性設置爲false,即。 frame.setVisible(假);它不再出現在任務欄中。要做到這一點最小化,你需要聽一個狀態改變,這是不同的,然後我說(我的1.4之前),但它很容易查找。當你恢復窗口,你只需setVisible(true),你很好再次去。 – phill 2010-11-20 19:20:27
好的,我會試一試,謝謝! – Matthias 2010-11-20 23:34:29