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

时间:2014-11-01 12:15:35

标签: javafx scalafx

我的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!")
}

单击Label时是否有一种简单的方法可以阻止VBox处理程序执行?

1 个答案:

答案 0 :(得分: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");
            }
        });
    }
}

事件处理链定义明确:

enter image description here

有关如何操纵此页面上事件的调度和处理的更多信息:Oracle Tutorial: Handling JavaFX Events