JavaFX事件
JavaFX教程 - JavaFX事件
点击按钮通常会触发事件。例如,点击我们打印对话框上的打印按钮以将文档打印到打印机。UI库使用事件来通知已发生的事情。
对于每个事件,都会有关于源和目标控件的信息。
事件
JavaFX事件是javafx.event.Event类或其子类的一个实例。
JavaFX提供了几个事件,包括
- ActionEvent
- InputEvent
- ScrollToEvent
- SortEvent
- MediaErrorEvent
- CheckBoxTreeItem.TreeModificationEvent
- TransformChangedEvent
- WindowEvent
- WorkerStateEvent
- WebEvent
- ...
- ...
您可以通过扩展 Event 类来定义自己的事件。
下表列出了事件的属性
| 属性 | 描述 |
|---|---|
| type | 发生的事件类型。 例如,鼠标事件。 |
| Source | 事件的起源。 |
| Target | 事件分派链中的最后一个节点。 |
事件类型
事件类型是EventType类的一个实例。例如,KeyEvent类包含以下事件类型:
- KEY_PRESSED
- KEY_RELEASED
- KEY_TYPED
事件周期
JavaFX事件传递过程包含以下步骤:
- Target selection
- Route construction
- Event capturing
- Event bubbling
- Target Selection
setOn事件
我们可以使用setOnXXX方法来注册事件处理程序,格式如下:
setOnEvent-type(EventHandler<? super event-class> value)
例如,
aButton.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
System.out.println("Hello World");
}
});
事件类型是处理程序处理的事件的类型,例如,键入类型事件的setOnKeyTyped或setOnMouseClicked用于鼠标点击事件。
event-class 是定义事件类型的类,例如,与键盘输入相关的事件的KeyEvent或与鼠标输入相关的事件的MouseEvent。
以下代码显示如何处理键按下和释放键时的键入事件:
setOnKeyTyped(EventHandler<? super KeyEvent> value)
下面的代码显示了如何处理按钮点击事件。setOnAction()方法用于注册事件处理程序。当用户单击按钮并打印时,将调用事件处理程序中的handle()方法“Hello World"到控制台。
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
/*from w ww . j a va2s . c o m*/
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 300, 250);
Button btn = new Button();
btn.setText("Hello World");
btn.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
System.out.println("Hello World");
}
});
root.getChildren().add(btn);
primaryStage.setScene(scene);
primaryStage.show();
}
}
上面的代码生成以下结果。
关键事件
setOnKeyPressed和setOnKeyReleased可以注册键事件处理程序。
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.stage.Stage;
/*www . j a v a2s. c o m*/
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 300, 250);
TextField textBox = new TextField();
textBox.setPromptText("Write here");
textBox.setOnKeyPressed(new EventHandler<KeyEvent>() {
public void handle(KeyEvent ke) {
System.out.println("Key Pressed: " + ke.getText());
}
});
textBox.setOnKeyReleased(new EventHandler<KeyEvent>() {
public void handle(KeyEvent ke) {
System.out.println("Key Released: " + ke.getText());
}
});
root.getChildren().add(textBox);
primaryStage.setScene(scene);
primaryStage.show();
}
}
上面的代码生成以下结果。
鼠标事件
我们可以使用setOnMouseEntered,setOnMouseExited,和setOnMousePressed注册鼠标事件处理程序。
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
/*from w w w .jav a 2 s. co m*/
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 300, 250);
Button btn = new Button();
btn.setText("Hello World");
btn.setOnMouseEntered(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
System.out.println("Mouse entered");
}
});
btn.setOnMouseExited(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
System.out.println("Mouse exited");
}
});
btn.setOnMousePressed(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
System.out.println("Mouse pressed");
}
});
root.getChildren().add(btn);
primaryStage.setScene(scene);
primaryStage.show();
}
}
上面的代码生成以下结果。

免费 AI IDE


更多建议: