举报投诉联系我们 手机版 热门标签 VUE中文网
您的位置:VUE中文网 > javafx事件处理机制 JavaFX事件过滤器

javafx事件处理机制 JavaFX事件过滤器

2023-03-18 07:17 Java教程

javafx事件处理机制 JavaFX事件过滤器

javafx事件处理机制

JavaFX事件处理机制是一种用于处理用户界面交互的机制,它可以让开发者更好地控制应用程序的行为。JavaFX事件处理机制使用一种叫做“监听器”的技术来实现,这种技术允许开发者在特定的时间内监听特定的事件,并根据需要执行特定的动作。

JavaFX中的事件处理机制提供了一个标准化的方法来处理用户界面中出现的不同类型的事件。例如,当用户单击一个按钮时,JavaFX会自动调用相应的“action listener”方法来处理该单击事件。此外,JavaFX还允许开发者使用不同类型的监听器来监听不同类型的事件(例如键盘、鼠标、焦点、菜单、文字输入等)。

// 创建一个Button对象 
Button btn = new Button("Click Me!"); 
// 注册ActionListener 
btn.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent event) { 
        System.out.println("Button Clicked!"); 
    } 
}); 

JavaFX事件过滤器

JavaFX教程 - JavaFX事件过滤器


事件过滤器允许我们在事件捕获阶段处理事件。

节点可以具有用于处理事件的一个或多个过滤器。

我们可以为多个节点使用一个过滤器来处理多个事件类型。

来自父节点的事件过滤器负责处理其子节点,并可拦截事件并防止子节点对事件执行操作。

注册事件过滤器

事件过滤器是EventHandler接口的实现。要注册过滤器,请使用addEventFilter()方法。

// Register an event filter for a single node and a specific event type
scene.addEventFilter(MouseEvent.MOUSE_CLICKED,
        new EventHandler<MouseEvent>() {
          public void handle(MouseEvent e) {
            System.out.println("mouse clicked");
          };
});

完整的源代码

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

    // Register an event filter for a single node and a specific event type
    scene.addEventFilter(MouseEvent.MOUSE_CLICKED,
        new EventHandler<MouseEvent>() {
          public void handle(MouseEvent e) {
            System.out.println("mouse clicked");
          };
        });

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

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

null


过滤器对象

以下代码定义了过滤器对象,并将其用于不同的事件过滤器。

// Define an event filter
EventHandler filter = new EventHandler<InputEvent>() {
  public void handle(InputEvent event) {
    System.out.println("Filtering out event " + event.getEventType());
    event.consume();
  }
};
// Register the same filter for two different nodes
scene.addEventFilter(MouseEvent.MOUSE_PRESSED, filter);

// Register the filter for another event type
scene.addEventFilter(KeyEvent.KEY_PRESSED, filter);


完整的源代码

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.InputEvent;
import javafx.scene.input.KeyEvent;
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);

    TextField textBox = new TextField();
    textBox.setPromptText("Write here");
    // Define an event filter
    EventHandler filter = new EventHandler<InputEvent>() {
      public void handle(InputEvent event) {
        System.out.println("Filtering out event " + event.getEventType());
        event.consume();
      }
    };
    // Register the same filter for two different nodes
    scene.addEventFilter(MouseEvent.MOUSE_PRESSED, filter);

    // Register the filter for another event type
    scene.addEventFilter(KeyEvent.KEY_PRESSED, filter);

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

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

null


删除事件过滤器

要删除事件过滤器,请使用removeEventFilter()方法。此方法将事件类型和过滤器作为参数。

以下代码删除MouseEvent.MOUSEPRESSED事件的过滤器。

// Remove an event filter
myNode1.removeEventFilter(MouseEvent.MOUSE_PRESSED, filter);

完整的源代码

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.InputEvent;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
// ww w.  ja  v 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);

    TextField textBox = new TextField();
    textBox.setPromptText("Write here");
    // Define an event filter
    EventHandler filter = new EventHandler<InputEvent>() {
      public void handle(InputEvent event) {
        System.out.println("Filtering out event " + event.getEventType());
        event.consume();
      }
    };
    // Register the same filter for two different nodes
    scene.addEventFilter(MouseEvent.MOUSE_PRESSED, filter);

    // Register the filter for another event type
    scene.addEventFilter(KeyEvent.KEY_PRESSED, filter);

    scene.removeEventFilter(MouseEvent.MOUSE_PRESSED, filter);
    
    
    root.getChildren().add(textBox);
    primaryStage.setScene(scene);
    primaryStage.show();
  }
}

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

null
阅读全文
以上是VUE中文网为你收集整理的javafx事件处理机制 JavaFX事件过滤器全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 VUE中文网 vue88.com 版权所有 联系我们