Java 在Windows的系统托盘中隐藏我的程序

Java 在Windows的系统托盘中隐藏我的程序,java,windows,swing,system-tray,Java,Windows,Swing,System Tray,我想让我的程序在Windows时钟附近的任务栏状态区域显示一个图标,并找到了一种方法 问题是,如果在窗口上按了“X”,我希望我的程序在状态区域保持打开状态,但在系统托盘中没有,但我不知道如何做,在谷歌上搜索也没有帮助(我可能没有搜索正确的术语) 编辑:我想我用错了词。我知道如何在通知区域中显示程序图标,我希望将其隐藏在最小化窗口时通常显示的区域。JavaSE v 6中添加了系统托盘支持 您可以在这里看到示例 我猜您希望在最小化主窗体时删除任务栏按钮。您可以通过将其visible属性设置为fals

我想让我的程序在Windows时钟附近的任务栏状态区域显示一个图标,并找到了一种方法

问题是,如果在窗口上按了“X”,我希望我的程序在状态区域保持打开状态,但在系统托盘中没有,但我不知道如何做,在谷歌上搜索也没有帮助(我可能没有搜索正确的术语)


编辑:我想我用错了词。我知道如何在通知区域中显示程序图标,我希望将其隐藏在最小化窗口时通常显示的区域。

JavaSE v 6中添加了系统托盘支持

您可以在这里看到示例

我猜您希望在最小化主窗体时删除任务栏按钮。您可以通过将其visible属性设置为false来实现这一点,但是您可以使用Java框架来实现这一点

我知道如何在通知区域中显示我的程序图标,我想将其隐藏在最小化窗口时通常显示的区域中

然后不要使用系统托盘

问题是,如果按下窗口上的“X”,我希望我的程序在状态区域保持打开状态


系统托盘的正式名称是通知区域(请参阅)。这可能有助于您的搜索。@user786653有趣的是,即使Java实现位于名称系统托盘下。这是raymond及其同事刚刚输掉的一场战斗——以及他们的官方指南如何使用它(这在我看来是一件好事~)Voo:Java实现可以在更多的系统上工作,而不仅仅是Windows,其他窗口管理器采用了术语»系统托盘«……谢谢。我没有看到正确的方法。我想我应该明白,如果让它不可见,它就会隐藏它。请添加一些关于代码的详细信息,以及为什么你注释掉了其中很大一部分,以便其他人更容易理解它
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
import java.awt.*;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;

public class HideToSystemTray extends JFrame {
    TrayIcon trayIcon;
    SystemTray tray;
    JButton button;

    HideToSystemTray() {
        super("SystemTray test");
        button = new JButton("Press");
        button.setBounds(10, 10, 40, 40);
        setUndecorated(true);
        getContentPane().add(button);
        System.out.println("creating instance");
        try {
            System.out.println("setting look and feel");
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            System.out.println("Unable to set LookAndFeel");
        }
        if (SystemTray.isSupported()) {
            System.out.println("system tray supported");
            tray = SystemTray.getSystemTray();

            Image image = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Sandipan\\Desktop\\cutter.png");
            ActionListener exitListener = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.out.println("Exiting....");
                    System.exit(0);
                }
            };
            PopupMenu popup = new PopupMenu();
            MenuItem defaultItem = new MenuItem("Exit");
            defaultItem.addActionListener(exitListener);
            popup.add(defaultItem);
            defaultItem = new MenuItem("Open");
            defaultItem.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    tray.remove(trayIcon);
                    setVisible(true);
                    System.out.println("Tray icon removed");
                }
            });
            popup.add(defaultItem);
            trayIcon = new TrayIcon(image, "SystemTray Demo", popup);
            trayIcon.setImageAutoSize(true);
        } else {
            System.out.println("system tray not supported");
        }

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //Execute when button is pressed
                System.out.println("You clicked the button");
                try {
                    tray.add(trayIcon);
                    setVisible(false);
                    System.out.println("added to SystemTray");
                } catch (AWTException ex) {
                    System.out.println("unable to add to tray");
                }
            }
        });


    /*  addWindowStateListener(new WindowStateListener() { 
    public void windowStateChanged(WindowEvent e) { 
        if(e.getNewState()==ICONIFIED){ 
            try { 
                tray.add(trayIcon); 
                setVisible(false); 
                System.out.println("added to SystemTray"); 
            } catch (AWTException ex) { 
                System.out.println("unable to add to tray"); 
            } 
        } 
        if(e.getNewState()==7){ 
            try{ 
                tray.add(trayIcon); 
                setVisible(false); 
                System.out.println("added to SystemTray"); 
            }catch(AWTException ex){ 
                System.out.println("unable to add to system tray"); 
            } 
        } 
        if(e.getNewState()==MAXIMIZED_BOTH){ 
            tray.remove(trayIcon); 
            setVisible(true); 
            System.out.println("Tray icon removed"); 
        } 
        if(e.getNewState()==NORMAL){ 
            tray.remove(trayIcon); 
            setVisible(true); 
            System.out.println("Tray icon removed"); 
        } 
    } 
    }); */
    setIconImage(Toolkit.getDefaultToolkit().getImage("C:\\Users\\Sandipan\\Desktop\\cutter.png"));

    setVisible(true);
    setSize(300, 200);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
    new HideToSystemTray();
}
}