如何在osx上添加监听器到java dock图标

时间:2013-05-06 14:42:39

标签: java macos actionlistener dock

我在我的应用程序中jframe隐藏在关闭,但当我点击停靠图标,我想要它 to 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机器上的应用程序?

1 个答案:

答案 0 :(得分: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类的存根,否则您将遇到编译器错误。请参阅here

如果您在Mac上开发,只需确保在Windows上运行时不执行代码。