import javafx.application.Application;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
public class EventTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Button button = new Button("EventTest");
button.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> System.out.println("addEventHandler1"));
button.setOnMouseClicked(event -> System.out.println("setOnMouseClicked1"));
button.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> System.out.println("addEventHandler2"));
button.setOnMouseClicked(event -> System.out.println("setOnMouseClicked2"));
button.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> System.out.println("addEventHandler3"));
FlowPane flowPane = new FlowPane(button);
flowPane.setOrientation(Orientation.VERTICAL);
flowPane.setAlignment(Pos.CENTER);
flowPane.setPrefHeight(200);
flowPane.setPrefWidth(200);
primaryStage.setScene(new Scene(flowPane));
primaryStage.show();
}
}
结果为:
addEventHandler1
addEventHandler2
addEventHandler3
setOnMouseClicked2
调试时,如果Node的setOnMouseClicked被编译到了,但点击时事件里的内容不执行,那么应该是被其他地方此Node的setOnMouseClicked替代了,而addEventHandler(MouseEvent.MOUSE_CLICKED, event ->{});不存在这个问题。