JavaFX事件

2018-01-09 19:24 更新

JavaFX教程 - JavaFX事件


點(diǎn)擊按鈕通常會(huì)觸發(fā)事件。例如,點(diǎn)擊我們打印對(duì)話框上的打印按鈕以將文檔打印到打印機(jī)。UI庫(kù)使用事件來通知已發(fā)生的事情。

對(duì)于每個(gè)事件,都會(huì)有關(guān)于源和目標(biāo)控件的信息。

事件

JavaFX事件是javafx.event.Event類或其子類的一個(gè)實(shí)例。

JavaFX提供了幾個(gè)事件,包括

  • ActionEvent
  • InputEvent
  • ScrollToEvent
  • SortEvent
  • MediaErrorEvent
  • CheckBoxTreeItem.TreeModificationEvent
  • TransformChangedEvent
  • WindowEvent
  • WorkerStateEvent
  • WebEvent
  • ...
  • ...

您可以通過擴(kuò)展 Event 類來定義自己的事件。

下表列出了事件的屬性

屬性 描述
type 發(fā)生的事件類型。 例如,鼠標(biāo)事件。
Source 事件的起源。
Target 事件分派鏈中的最后一個(gè)節(jié)點(diǎn)。


事件類型

事件類型是EventType類的一個(gè)實(shí)例。例如,KeyEvent類包含以下事件類型:

  • KEY_PRESSED
  • KEY_RELEASED
  • KEY_TYPED


事件周期

JavaFX事件傳遞過程包含以下步驟:

  • Target selection
  • Route construction
  • Event capturing
  • Event bubbling
  • Target Selection

setOn事件

我們可以使用setOnXXX方法來注冊(cè)事件處理程序,格式如下:

setOnEvent-type(EventHandler<? super event-class> value)

例如,

    
aButton.setOnAction(new EventHandler<ActionEvent>() {
    public void handle(ActionEvent event) {
        System.out.println("Hello World");
    }
});

事件類型是處理程序處理的事件的類型,例如,鍵入類型事件的setOnKeyTyped或setOnMouseClicked用于鼠標(biāo)點(diǎn)擊事件。

event-class 是定義事件類型的類,例如,與鍵盤輸入相關(guān)的事件的KeyEvent或與鼠標(biāo)輸入相關(guān)的事件的MouseEvent。

以下代碼顯示如何處理鍵按下和釋放鍵時(shí)的鍵入事件:

setOnKeyTyped(EventHandler<? super KeyEvent> value)

下面的代碼顯示了如何處理按鈕點(diǎn)擊事件。setOnAction()方法用于注冊(cè)事件處理程序。當(dāng)用戶單擊按鈕并打印時(shí),將調(diào)用事件處理程序中的handle()方法“Hello World"到控制臺(tái)。

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

上面的代碼生成以下結(jié)果。

null

關(guān)鍵事件

setOnKeyPressed和setOnKeyReleased可以注冊(cè)鍵事件處理程序。

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

上面的代碼生成以下結(jié)果。

null

鼠標(biāo)事件

我們可以使用setOnMouseEntered,setOnMouseExited,和setOnMousePressed注冊(cè)鼠標(biāo)事件處理程序。

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

上面的代碼生成以下結(jié)果。

null
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)