JavaFX事件处理程序

JavaFX教程 – JavaFX事件处理程序

事件处理程序允许在事件冒泡阶段期间处理事件。

注册事件处理程序

事件处理程序是EventHandler接口的实现。要注册处理程序,请使用addEventHandler()方法。

scene.addEventHandler(DragEvent.DRAG_ENTERED,
        new EventHandler<DragEvent>() {
          public void handle(DragEvent e) {
            System.out.println("drag enter");
          }
});

完整的源代码

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.DragEvent;
import javafx.stage.Stage;
/*from  w w w. j  a v a2  s.com*/
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");

    // Register an event handler for a single node and a specific event type
    scene.addEventHandler(DragEvent.DRAG_ENTERED,
        new EventHandler<DragEvent>() {
          public void handle(DragEvent e) {
            System.out.println("drag enter");
          }
        });

    root.getChildren().add(textBox);
    primaryStage.setScene(scene);
    primaryStage.show();
  }
}

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

重用事件处理程序

以下代码定义了一个事件处理程序对象并重用它添加事件处理程序。

    // Define an event handler
    EventHandler handler = new EventHandler<InputEvent>() {
      public void handle(InputEvent event) {
        System.out.println("Handling event " + event.getEventType());
        event.consume();
      }
    };
    scene.addEventHandler(DragEvent.DRAG_EXITED, handler);

    scene.addEventHandler(MouseEvent.MOUSE_DRAGGED, handler);

完整的源代码

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.DragEvent;
import javafx.scene.input.InputEvent;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
/*ww w  .  ja va 2s  .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");

    // Define an event handler
    EventHandler handler = new EventHandler<InputEvent>() {
      public void handle(InputEvent event) {
        System.out.println("Handling event " + event.getEventType());
        event.consume();
      }
    };
    scene.addEventHandler(DragEvent.DRAG_EXITED, handler);

    scene.addEventHandler(MouseEvent.MOUSE_DRAGGED, handler);

    root.getChildren().add(textBox);
    primaryStage.setScene(scene);
    primaryStage.show();
  }
}

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

删除事件处理程序

删除事件处理程序

myNode.removeEventHandler(DragEvent.DRAG_EXITED, handler);

要删除由方便方法注册的事件处理程序,传递null到便利方法

node.setOnMouseDragged(null);
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《JavaFX事件处理程序》
文章链接:https://zhuji.vsping.com/292502.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。