如何动态启用或禁用Java Swing程序的任务栏图标

时间:2010-11-20 01:06:22

标签: java swing jframe taskbar

我正在使用和JFrame编写基于Java Swing的程序,它能够显示系统托盘图标,以便快速访问最常用的功能。现在我想为用户添加一个选项,以选择在程序窗口最小化时是否应显示正常(Windows)任务栏图标。

谷歌搜索告诉我,我可以使用JDialog而不是JFrame。不幸的是,在我的情况下,这不是一个好的解决方案,因为我想根据用户的决定动态启用或禁用任务栏图标。

这有可能吗?

谢谢和亲切的问候,马蒂亚斯

2 个答案:

答案 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);
    }
}