JavaFX事件处理程序

2018-01-09 19:24 更新

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

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

null


重用事件处理程序

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

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

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

null


删除事件处理程序

删除事件处理程序

myNode.removeEventHandler(DragEvent.DRAG_EXITED, handler);

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

node.setOnMouseDragged(null);
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号