1

我在我的应用程序中关闭了 jframe 隐藏,但是当我单击停靠图标时,我希望它设置为 setVisible(true); 如何将动作侦听器添加到停靠图标?我试过

Image im = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("SLogo.png"));
final TrayIcon tri = new TrayIcon(im);
tri.addActionListener(this);

@Override
public void actionPerformed(ActionEvent ae) {
     this.setVisible(true);
     System.out.print("ok");

}

但它没有被触发,而且,它将如何影响 Windows 机器上的应用程序?

4

1 回答 1

1

您需要使用AppForegroundListener和/或AppReOpenedListener。看这个例子:

public static void main(String[] args)
{
    final JFrame frame = new JFrame();

    Application app = Application.getApplication();
    app.addAppEventListener(new AppForegroundListener() {

        @Override
        public void appMovedToBackground(AppForegroundEvent arg0)
        {
            System.out.println("appMovedToBackground");
        }

        @Override
        public void appRaisedToForeground(AppForegroundEvent arg0)
        {
            System.out.println("appRaisedToForeground");
            frame.setVisible(true);
        }

    });

    app.addAppEventListener(new AppReOpenedListener() {
        @Override
        public void appReOpened(AppReOpenedEvent arg0)
        {
            System.out.println("app reoponed");
            frame.setVisible(true);
        }
    });

    frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    frame.setSize(200, 200);
    frame.setVisible(true);
}

如果你在 Windows 上开发,你需要包含 Mac/Java 类的存根,否则你会得到编译器错误。见这里

如果你在 Mac 上开发,只要确保代码在 Windows 上运行时没有被执行。

于 2013-05-07T14:37:54.467 回答