如何在Java中使用带托盘图标的上下文菜单?

如何在Java中使用带托盘图标的上下文菜单?,java,swing,Java,Swing,我正在使用Netbeans开发一个Java应用程序,我想在系统托盘上创建一个托盘图标,当我右键单击托盘图标时,将显示一个弹出菜单 我已经创建了一个jframe和弹出菜单,通过拖放它们 但我有一个问题。我的弹出菜单有两个菜单项(退出和显示登录),但所选菜单项没有亮起,单击菜单项后,弹出菜单没有关闭 这是我的密码: 声明一些全局变量 SystemTray systemTray = null; Image image = Toolkit.getDefaultToolkit().getImage("D:

我正在使用Netbeans开发一个Java应用程序,我想在系统托盘上创建一个托盘图标,当我右键单击托盘图标时,将显示一个弹出菜单

我已经创建了一个jframe和弹出菜单,通过拖放它们

但我有一个问题。我的弹出菜单有两个菜单项(退出显示登录),但所选菜单项没有亮起,单击菜单项后,弹出菜单没有关闭

这是我的密码:

声明一些全局变量

SystemTray systemTray = null;
Image image = Toolkit.getDefaultToolkit().getImage("D:/key-16x16.png");

TrayIcon trayIcon = new TrayIcon(image);
创建并显示系统托盘图标

 systemTray = SystemTray.getSystemTray();
    try
    {
        systemTray.add(trayIcon);
    } catch (AWTException ex)
    {
        Logger.getLogger(mainframe.class.getName()).log(Level.SEVERE, null, ex);
    }
MouseAdapter trayIconMouseAdapter = new MouseAdapter()
    {
      //  @Override
       public void mouseClicked(MouseEvent e) {
                trayIconMouseClicked(e);
       }
    };

   trayIcon.addMouseListener(trayIconMouseAdapter);
创建MouseAdapter并为托盘图标添加mouseListener

 systemTray = SystemTray.getSystemTray();
    try
    {
        systemTray.add(trayIcon);
    } catch (AWTException ex)
    {
        Logger.getLogger(mainframe.class.getName()).log(Level.SEVERE, null, ex);
    }
MouseAdapter trayIconMouseAdapter = new MouseAdapter()
    {
      //  @Override
       public void mouseClicked(MouseEvent e) {
                trayIconMouseClicked(e);
       }
    };

   trayIcon.addMouseListener(trayIconMouseAdapter);
处理托盘图标上的鼠标单击事件。检查是否为右键单击并显示弹出菜单

private void trayIconMouseClicked(java.awt.event.MouseEvent evt) {

    if(SwingUtilities.isRightMouseButton(evt))
    {
      popupMeunu.show(evt.getComponent(), evt.getX(), evt.getY());

    }
}
但是如果我将一个按钮拖到jframe并替换
popupMeunu.show(evt.getComponent(),evt.getX(),evt.getY())
by
popupMeunu.show(jButton1,evt.getX(),evt.getY())一切都会好起来的


我不知道为什么?请帮我解决我的问题。

不要添加你自己的鼠标听筒

将您的
popupMeunu
(需要是
java.awt.PopupMenu
,而不是
javax.swing.jpopumenu
)传递到
TrayIcon
的构造函数中,如下所示:

TrayIcon trayIcon = new TrayIcon(image, "The Tip Text", popup);
我从这个复制了这个,效果很好