当前位置: 首页 > 知识库问答 >
问题:

在ScalaFx/JavaFx执行中覆盖鼠标侦听器的元素

单于煌
2023-03-14

我的ScalaFX应用程序中存在以下问题。我在VBox中有一个标签。两者都分配了一个onMouseClicked侦听器,如我的示例代码所示。单击内部标签时,将执行两个处理程序。这不是我想要强迫的行为。我只希望执行标签侦听器。

示例-代码

new VBox{
  content add new Label {
    text = "inside label"
    onMouseClicked = (me : MouseEvent) => println("Execute just me!")
  }
  onMouseClicked = (me : MouseEvent) => println("Do not execute when label is clicked!")
}

有没有一种简单的方法可以在点击标签时阻止VBox处理程序被执行?

共有1个答案

罗河
2023-03-14

您需要消费该事件。以下代码适用于JavaFX:

class TestPane extends Pane {

    private Label label;
    private VBox vbox;

    public TestPane() {
        label = new Label();
        label.setText("Waiting...");
        vbox = new VBox();
        vbox.getChildren().add(label);
        getChildren().add(vbox);
        label.setOnMouseClicked(new EventHandler<Event>() {
            @Override
            public void handle(Event event) {
                System.out.println("label event");
                event.consume();
            }
        });
        vbox.setOnMouseClicked(new EventHandler<Event>() {
            @Override
            public void handle(Event event) {
                System.out.println("vbox event");
            }
        });
    }
}

事件处理链定义良好:

此页面上有有关如何操作事件的调度和处理的更多信息:Oracle教程:处理JavaFX事件

 类似资料:
  • 我正在编写一个小型测试应用程序,该应用程序使用Scala中的类和。问题在于: 抛出错误: 我不明白为什么当这个完全相同的片段出现在方法中时会编译,而当它出现在对象的代码中时却不会编译。 顺便说一句,在浏览了大量ScalaFX代码之后,我有些头晕,因为我已经看到了许多绑定到事件的不同方法,我正在使用的就是一种,使用FilterEvent设置onMouseClicked变量(有和没有第一类函数)。另外

  • 问题内容: 我当时在上网,但找不到很好的信息。我试图在每次运行应用程序时检测按键。我正在使用JavaFX并将其与FXML一起运行。我尝试了很多事情,但没有任何效果。请帮我。 问题答案: 您应该签出Ensemble示例。这是关键的侦听器代码。

  • 我在我的一个工作流应用程序中使用了Camunda BPMN2.0。在我的一个服务任务中,我在start事件中创建了一个执行侦听器,在create事件中创建了一个任务侦听器。我不确定在开始时同时分配这些是否合适。如果是正确的,它们中的哪一个将首先执行--执行监听器或任务监听器,分别在start或create事件中执行?

  • 是否可能有一个全局鼠标运动监听器,根据点击的JPanel的内容而具有不同的效果(仅使用一个鼠标运动监听器)? 例如:我有一个JFrame,其中添加了两个JPanel,并在JFrame中添加了一个鼠标运动监听器。当我点击一个JPanel时,我希望屏幕能够调整大小,但当我点击另一个JPanel时,我希望JFrame能够被拖动。我认为这可以通过使用JLabel来完成,使用JLabel的文本进行检查,与J

  • 问题内容: 我有这个代码 尽管我仍未使用userdata,但事实是,每当我单击切换按钮时,我都会获得升序的所需输出。 这是输出: 在第一次单击中,我什么也没得到。 从第二次单击开始,我开始获得这种输出。谁能解释这种行为并为我提供解决方案? 问题答案: 该方法中的所有代码都应转到控制器的方法中。 现在,在第一个切换上单击,为设置数据,然后将它们放入组中,然后在上设置侦听器。因此,仅在第二次切换单击时

  • 问题内容: 我正在尝试将鼠标侦听器添加到MapMarker,以便当鼠标将鼠标悬停在MapMarker上时,我可以对事件做出反应。 我实现了mouseListener,但是我不能真正添加​​一个监听器。问题是由于没有层次结构实现JPanel,所以我没有找到MapMarker添加addMouseListener的方法。 任何帮助表示赞赏 问题答案: 如前所述这里,默认的构造函数使用了“这实现了Map按