我在學習JavaFX事件處理。我發現我們可以通過兩種方式註冊事件。setOnXXX()方法和addEventHandler()之間的區別JavaFx
一種是像setOnAction(EventHandler)
方便的方法,setOnMouseClicked(EventHandler)
二是通過使用addEventHandler(MouseEvent.MOUSE_CLICKED, EventHandler)
但我很困惑它們之間有什麼區別呢?如何決定哪一個適合?
我已經測試和註冊兩個事件處理程序使用這兩種方法,都工作正常。
Button btn = new Button("Click Me One!");
btn.setOnMouseEntered(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent e){
System.out.println("Mouse Entered on Click Me One");
}
});
btn.setOnMouseExited(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent e){
System.out.println("Mouse Exited from Click Me One");
}
});
Button btn2 = new Button("Click Me Two!");
btn2.addEventHandler(MouseEvent.MOUSE_ENTERED, new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent e){
System.out.println("Mouse Entered on Click Me Two");
}
});
btn2.addEventHandler(MouseEvent.MOUSE_EXITED, new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent e){
System.out.println("Mouse Exited from Click Me Two");
}
});
這是檢查後的輸出。
Mouse Entered on Click Me One
Mouse Exited from Click Me One
Mouse Entered on Click Me Two
Mouse Exited from Click Me Two
我也通過定義事件處理程序進行檢查。
Button btn2 = new Button("Click Me Two!");
// Define an event handler
EventHandler<InputEvent> handler = new EventHandler<InputEvent>() {
public void handle(InputEvent event) {
System.out.println("Handling event " + event.getEventType());
}
};
btn2.addEventHandler(MouseEvent.MOUSE_ENTERED, handler);
btn2.addEventHandler(MouseEvent.MOUSE_EXITED, handler);
btn2.setOnMouseEntered(handler);
btn2.setOnMouseExited(handler);
輸出:
Handling event MOUSE_ENTERED
Handling event MOUSE_ENTERED
Handling event MOUSE_EXITED
Handling event MOUSE_EXITED
你的代碼中加入他們無關,與你的問題一樣
EventType
。你的代碼中沒有任何地方使用'addEventHandler'。 (對於記錄,您應該始終使用setOnAction作爲按鈕,而不是setOnMouseClicked。並非每個用戶都使用鼠標激活按鈕。) – VGR@VGR我已更新代碼,請現在檢查。 – UnKnown
如果沒有別的,顯式事件屬性可用於確切地列舉哪些事件對於特定類是有效的。 – VGR