java - 防止双重打开 JavaFX 8 ContextMenu

标签 java javafx

我正在使用带有 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/

相关文章:

java - 打印分割字符串

java - 比较数组列表中不同的对象值

java - 重新启动 Chromecast

JavaFX:如何根据 GridPane 内动态创建的文本字段的值计算平均值?

java - 在 Java 中自动填充字段 WebView

java - 获取资源的大小

java - 使用 java html 解析器提取文本

java - 从 JavaFX 打印时设置要使用的 CSS

javafx:如何将 mousepressed 事件应用于循环中的 ImageView?

image - JavaFX显示场景背景图片