【问题标题】:Swing context menu on JavaFX ChartJavaFX Chart 上的 Swing 上下文菜单
【发布时间】:2025-12-19 19:55:11
【问题描述】:

虽然图表对话框使用 JavaFX,但我主要在 Swing 中开发应用程序。 (确切地说,ChartGridPaneJFXPanel 中。)

首先,Chart 没有实现 setContextMenu 方法来使用 JFX ContextMenu。我已经通过将处理程序附加到图表的右键单击来看到一种解决方法,但是当它失去焦点时菜单不会从 GUI 中删除,而是一直持续到用户 1)触发它再次打开或 2)单击MenuItem.

chart.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
    @Override
    public void handle(MouseEvent t) {
        if (t.getButton() == MouseButton.SECONDARY) {
            contextMenu.show(chart, t.getScreenX(), t.getScreenY());
        }
    }
});

也就是说,我更喜欢使用 Swing JPopupMenu。如何将其绑定到我的 Chart 并保持自然行为?

谢谢!

【问题讨论】:

    标签: java swing javafx charts java-7


    【解决方案1】:

    我确定无法使用JPopupMenu

    ContextMenu 被添加到JLabel

    Label contextMenuLabel = new Label();
    grid.add(contextMenuLabel, 0, 0); // Add to the same grid after adding the chart
    contextMenuLabel.setPrefSize(width, height);
    contextMenuLabel.setMinSize(width, height);
    contextMenuLabel.setMaxSize(width, height);
    
    ContextMenu contextMenu = new ContextMenu();
    
    contextMenuLabel.setContextMenu(contextMenu);
    

    【讨论】: