举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > javafx事件监听 JavaFX事件

javafx事件监听 JavaFX事件

2023-03-23 10:18 Java教程

javafx事件监听 JavaFX事件

javafx事件监听

JavaFX事件监听是一种用于处理用户界面操作的机制,它可以让开发者在用户界面上添加响应操作。JavaFX事件监听器是一种特殊的对象,它可以监听特定的事件,并在发生时执行特定的代码。

JavaFX事件监听器有两个重要的部分:一个是事件源(Event Source),即可能会触发事件的对象;另一个是事件处理器(Event Handler),即当特定的事件被触发时所执行的代码。

要使用JavaFX中的事件监听机制,需要先创建一个新的EventHandler对象。EventHandler对象必须实现handle()方法来处理特定的事件。handle()方法接收一个EventObject作为入参,该对象包含有关该特定事件的信息。

  EventHandler<ActionEvent> eventHandler = new EventHandler<ActionEvent>() { 

    @Override 

    public void handle(ActionEvent event) { 

        // Do something when the button is clicked 

    } 

}; 

然后将该eventHandler对象传递给setOnAction()方法来将其注册到Button上。当Button上发生action时就会执行handle()方法中声明的代码。

button.setOnAction(eventHandler);

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;

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();
  }
}

上面的代码生成以下结果。

null

关键事件

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;

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();
  }
}

上面的代码生成以下结果。

null

鼠标事件

我们可以使用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;

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();
  }
}

上面的代码生成以下结果。

null
阅读全文
以上是编程学为你收集整理的javafx事件监听 JavaFX事件全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部