将 JPopupMenu 添加到 TrayIcon

2022-09-03 15:54:48

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

public TrayIcon(Image image,
            String tooltip,
            PopupMenu popup)

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


答案 1

这是一个已知问题。有一个错误报告,其中包含解决方法的大纲。我在下面进行了调整:

// 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);
        }
    }
});

答案 2

对于当前实现,不可能直接将 或 添加到 。但是,有些人确实设法通过实现一个自定义来解决这个问题,该自定义仅在.右键单击鼠标时,将弹出窗口的位置设置为 和 并设置为可视。TrayIconJPopupMenuJMenuTrayIconMouseListenerTrayiconevent.getXOnScreen()event.getYOnScreen()


推荐