隐藏任务栏中的窗口

时间:2015-09-21 20:21:33

标签: java swing

我正在尝试开发自己的应用程序来在桌面上放置笔记(类似于Windows操作系统下的Sticky Notes)。一切都运行良好,但我仍然面临一个问题:因为我希望应用程序尽可能“最小”,我希望它不会出现在任务栏中,所以它不会打扰用户。最终,我希望它出现在系统托盘中,但目前,这不是重点。为了使应用程序跨平台,我正在用Java开发它,我读到为了不让它出现在任务栏中,可以使用JDialog。现在我的班级是

public class NoteWindow extends JDialog implements WindowListener, WindowFocusListener, KeyListener, ComponentListener,
        MouseMotionListener, MouseListener

并且在代码中我也放了

setType(Type.UTILITY);
setBounds(100, 100, 235, 235);
getContentPane().setLayout(null);
setUndecorated(true);

但它似乎不起作用:在Linux Mint 17.2下,我仍然在任务栏中看到窗口(每个窗口对应一个注释)(或者在Linux下等效)。

我错过了什么吗?

修改

我张贴图片以显示我的意思,以及我不想看到的内容:

screenshot

1 个答案:

答案 0 :(得分:0)

JDialog应附加JFrame父母。然后对话框在任务栏中没有相应的按钮。因此,我建议您创建一个JFrame个实例,但不会将其显示为。在Sticky Notes示例中,每个音符窗口都具有相同的父级。

package com.thomaskuenneth;

import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class DialogDemo {

    public static void main(String[] args) {
        JFrame parent = new JFrame();
        JDialog d = new JDialog(parent, "Hello");
        d.setBounds(50, 50, 200, 200);
        d.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        d.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        d.setVisible(true);
    }
}

请注意,我没有使用setUndecorated(true);来回复关闭窗口。如果您有其他方法来响应此类请求,例如通过单击对话框内的按钮,您当然可以使用setUndecorated(true);