问题:不可能通过 addContextMenu(menu) 简单地将 ContextMenu '添加'到 Canvas 或 Pane 元素,它仅适用于 javafx.scene.control 元素(并且 Canvas 或 Panel 都不扩展此类)。
问题:是否有任何“干净”的方式将 ContextMenu 项目“注册”到 Canvas 元素?我期望此菜单的标准行为(在 RMB 单击 Canvas 元素后显示,在单击 LMB 时自动隐藏等)。
问题:不可能通过 addContextMenu(menu) 简单地将 ContextMenu '添加'到 Canvas 或 Pane 元素,它仅适用于 javafx.scene.control 元素(并且 Canvas 或 Panel 都不扩展此类)。
问题:是否有任何“干净”的方式将 ContextMenu 项目“注册”到 Canvas 元素?我期望此菜单的标准行为(在 RMB 单击 Canvas 元素后显示,在单击 LMB 时自动隐藏等)。
Canvas canvas = ... ;
ContextMenu menu = ... ;
canvas.setOnContextMenuRequested(e -> menu.show(canvas, e.getScreenX(), e.getScreenY()));
当上下文菜单可见时单击画布时,James_D 的解决方案可能不会关闭菜单。看到这个错误:
https://bugs.openjdk.java.net/browse/JDK-8095591
因此,我建议使用:
Canvas canvas = ... ;
ContextMenu menu = ... ;
canvas.setOnContextMenuRequested(e -> menu.show(canvas.getScene().getWindow(), e.getScreenX(), e.getScreenY()));
也许你可以使用 Chrome 扩展的 contextMenu。这是官方文件。
到目前为止,我发现的唯一问题是画布的上下文类型不清楚。["all"] 有效,但不是一个好方法。