将JPopupMenu添加到TrayIcon

sap*_*Pro 14 java swing trayicon system-tray jpopupmenu

我想添加JPopupMenu到任务栏作为TrayIcon( systemTray.add(trayIcon)),但我还没有找到办法这样做.从文档中,TrayIcon的构造函数如下所示:

public TrayIcon(Image image,
            String tooltip,
            PopupMenu popup)
Run Code Online (Sandbox Code Playgroud)

有什么方法可以做到这一点吗?

Moo*_*als 5

这是一个已知问题.有一个错误报告,其中包含一个变通方法的大纲.我在下面改编了:

// Build your popup menu
final JPopupMenu trayPopup = new JPopupMenu();
// I'm using actions, there are other ways of doing this.
trayPopup.add(someFantaticAction);

// Get your tray icon
trayIcon = new TrayIcon(icon, "My awesome application");

trayIcon.addMouseListener(new MouseAdapter() {

    @Override
    public void mouseReleased(MouseEvent e) {
        maybeShowPopup(e);
    }

    @Override
    public void mousePressed(MouseEvent e) {
        maybeShowPopup(e);
    }

    private void maybeShowPopup(MouseEvent e) {
        if (e.isPopupTrigger()) {
            trayPopup.setLocation(e.getX(), e.getY());
            trayPopup.setInvoker(trayPopup);
            trayPopup.setVisible(true);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 无论如何,此解决方案似乎存在问题:当您在弹出窗口之外单击时,该弹出窗口并未关闭。 (3认同)

dbo*_*bow -1

您可以查看Oracle的教程和示例如何使用系统托盘

  • 正如文档/教程所述,对 TrayIcon 的支持是有限的,直到今天,JPopupMenu 还不能通过构造函数直接添加到 TrayIcon 中,因此投反对票。 (3认同)