我的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处理程序执行?
答案 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");
}
});
}
}
事件处理链定义明确:
有关如何操纵此页面上事件的调度和处理的更多信息:Oracle Tutorial: Handling JavaFX Events