如何将上下文菜单添加到 canvas 元素?

How to add context menu to a canvas element?

问题: 无法通过 addContextMenu(menu) 将 'add' ContextMenu 简单地添加到 Canvas 或 Pane 元素,这仅适用于 javafx.scene.control 元素(Canvas 或 Panel 均未扩展此 class)。

问题: 是否有任何 'clean' 方法将 'register' 上下文菜单项添加到 Canvas 元素?我期望此菜单的标准行为(在 RMB 单击 Canvas 元素后显示,在用 LMB 等单击时自动隐藏)。

Canvas canvas = ... ;
ContextMenu menu = ... ;

canvas.setOnContextMenuRequested(e -> menu.show(canvas, e.getScreenX(), e.getScreenY()));

也许您可以使用 Chrome 扩展程序的上下文菜单。这里是 the official document.

到目前为止我发现的唯一问题是 canvas 的上下文类型不明确。 ["all"] 可行,但不是一个好方法。

James_D 的解决方案在上下文菜单可见时单击 canvas 时可能不会关闭菜单。看到这个错误:

https://bugs.openjdk.java.net/browse/JDK-8095591

因此,我建议使用:

Canvas canvas = ... ;
ContextMenu menu = ... ;

canvas.setOnContextMenuRequested(e -> menu.show(canvas.getScene().getWindow(), e.getScreenX(), e.getScreenY()));