如何检测System TrayIcon for Java App的单击?

时间:2012-09-05 04:09:44

标签: java swing actionlistener system-tray trayicon

我正在开发一个简单的Java swing应用程序,它在创建时会在系统托盘中添加一个图标。我尝试做的是检测用户单击此图标的时间(无论是通过左键单击还是右键单击),没有弹出菜单,我只想在应用程序恢复时点击图标。

这是我使用的代码:

    SystemTray tray = SystemTray.getSystemTray(); 
    Image icon = toolkit.getImage("icon.png");

    ActionListener listener = new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            System.out.println("click detected");
        }
    };

    TrayIcon trayIcon = new TrayIcon(icon, "Test Program", null);
    trayIcon.addActionListener(listener);
    tray.add(trayIcon);

当我运行此程序时会发生什么,是单击(左或右)没有效果,但是当我双击时,它会显示消息'点击检测到'在控制台中。

如果还能检测到单次点击,我该怎么办?我需要使用MouseListener吗? (我听说MouseListeners会导致问题,ActionListeners会更好)

1 个答案:

答案 0 :(得分:12)

您可以使用MouseListener,即:

trayIcon.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
        if (e.getClickCount() == 1) {

        }
    }
}); 

有关详细信息,请参阅How to Write a Mouse Listener

编辑:ActionListener与MouseListener

存在低级别和语义事件的概念。只要有可能,您应该监听语义事件而不是低级事件,例如侦听动作事件而不是鼠标事件。请阅读Low-Level Events and Semantic Events中的详细信息。

在这种情况下,您只需要从事件中获取更多详细信息,因此需要使用MouseListener。