2

我的 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 处理程序?

4

1 回答 1

3

您需要使用该事件。以下代码适用于 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 事件

于 2014-11-02T14:55:29.170 回答