我正在使用带有 GridPane 的 JavaFX ContextMenu,在 GridPane 上我还放置了具有自己的 ContextMenus 的矩形。两个上下文菜单都在单击鼠标右键时触发。
GridPane 上的事件处理程序如下所示:
this.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
if (event.getButton().equals(MouseButton.SECONDARY)) {
ContextMenu cm = new ContextMenu();
MenuItem newElement = new MenuItem("Add Element");
addElement.setOnAction(menuEvent -> { /* Logic for handling context menu action */ });
cm.getItems.add(newElement);
cm.show(this,event.getScreenX(),event.getScreenY());
}
});
网格上 Rectangle
的事件处理程序如下所示:
this.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
// Right click
if (event.getButton().equals(MouseButton.SECONDARY)) {
this.requestFocus();
ContextMenu cm = new ContextMenu();
MenuItem toRemove = new MenuItem("Delete Element");
toRemove .setOnAction(menuEvent -> {
/* Logic for removing element */
});
cm.getItems().add(toRemove );
cm.show(this, event.getScreenX(), event.getScreenY());
}
});
如果右键单击 GridPane 上的元素,如何确保仅显示该元素的上下文菜单?
最佳答案
由于事件向上传播是根据:
https://docs.oracle.com/javase/8/javafx/events-tutorial/processing.htm
需要补充的是:
event.consume();
在网格上元素的处理程序末尾,这样右键单击事件就不会继续传播到 GridPane 的事件处理程序。
关于java - 防止双重打开 JavaFX 8 ContextMenu,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31940967/