我正在使用和JFrame编写基于Java Swing的程序,它能够显示系统托盘图标,以便快速访问最常用的功能。现在我想为用户添加一个选项,以选择在程序窗口最小化时是否应显示正常(Windows)任务栏图标。
谷歌搜索告诉我,我可以使用JDialog而不是JFrame。不幸的是,在我的情况下,这不是一个好的解决方案,因为我想根据用户的决定动态启用或禁用任务栏图标。
这有可能吗?
谢谢和亲切的问候,马蒂亚斯
答案 0 :(得分:2)
JDialog或JFrame只是一个容器。他们之间的切换不适合你的情况?当您需要切换时,只需创建另一种类型的新实例设置为相同的位置和大小,然后移动contentPane。
答案 1 :(得分: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);
}
}