Javafx 简明教程

JavaFX - Using Convenience Methods

事件处理程序简单地定义为在某个事件发生后要执行的操作。可以注册这些事件处理程序以处理更复杂的事件;您还可以使用便捷方法在 JavaFX 应用程序中注册事件处理程序。可以创建和注册事件处理程序以响应鼠标事件、键盘事件、窗口事件等事件。

某些 JavaFX 类定义事件处理程序属性,这些属性提供了一种注册事件处理程序的方式。将事件处理程序属性设置为用户定义的事件处理程序会自动注册处理程序以接收相应的事件类型。事件处理程序属性的 setter 方法是注册事件处理程序的便捷方法。

Using Convenience Methods for Event Handling

JavaFX 中的某些类定义了事件处理程序属性。通过使用各自的 setter 方法将值设置为这些属性,您可以注册到事件处理程序。这些方法称为便捷方法。

这些方法大多数存在于 Node、Scene、Window 等类中,并且对于所有子类都可用。下表描述了可用于不同事件的不同便捷方法:

User Action

Event Type

EventHandler Properties

按下、松开或键入键盘上的键。

KeyEvent

onKeypressed onKeyReleased onKeyTyped

移动、单击或拖动鼠标。

MouseEvent

onMouseClicked onMouseMoved onMousePressed onMouseReleased onMouseEntered onMouseExited

按下、拖动和松开鼠标按钮。

MouseDragEvent

onMouseDragged onMouseDragEntered onMouseDragExited onMouseDragged onMouseDragOver onMouseDragReleased

通过交替的方法生成、更改、删除或提交输入。

InputMethodEvent

onInputMethodTextChanged

执行平台支持的拖放操作。

DragEvent

onDragDetected onDragDone onDragDropped onDragEntered onDragExited onDragOver

Scrolling an object.

ScrollEvent

onScroll onScrollStarted onScrollFinished

Rotating an object.

RotateEvent

onRotate onRotationFinished onRotationStarted

向上、向下、向右和向左滑动对象。

SwipeEvent

onSwipeUP onSwipeDown onSwipeLeft onSwipeRight

Touching an object.

TouchEvent

onTouchMoved onTouchReleased onTouchStationary

Zooming on an object.

ZoomEvent

onZoom onZoomStarted onZoomFinished

Requesting Context Menu.

ContextMenuEvent

onContextMenuRequested

按下按钮、显示或隐藏组合框、选择菜单项。

ActionEvent

编辑列表中的项目。

ListView.EditEvent

编辑表格中的项目。

TableColumn.CellEditEvent

编辑树中的项目。

TreeView.EditEvent

在媒体播放器中遇到错误。

MediaErrorEvent

Showing or Hiding Menu.

Event

Hiding a pop-up window.

Event

选择或关闭选项卡。

Event

显示、最小化或关闭一个窗口。

WindowEvent

Syntax

以下为用于注册事件处理程序的便捷方法的格式:

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

例如,要像下面所示,向一个按钮中添加一个鼠标的事件监听器,你可以使用便捷的方法 setOnMouseClicked()

playButton.setOnMouseClicked((new EventHandler<MouseEvent>() {
   public void handle(MouseEvent event) {
      System.out.println("Hello World");
      pathTransition.play();
   }
}));

Example

下面的程序是一个演示在 JavaFX 中使用便捷方法进行事件处理程序的例子。

将这个代码保存在名为 ConvenienceMethodsExample.java 的文件中。

import javafx.animation.PathTransition;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.EventHandler;

import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;

import javafx.scene.shape.Circle;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;
import javafx.util.Duration;

public class ConvenienceMethodsExample extends Application {
   @Override
   public void start(Stage stage) {
      //Drawing a Circle
      Circle circle = new Circle();

      //Setting the position of the circle
      circle.setCenterX(300.0f);
      circle.setCenterY(135.0f);

      //Setting the radius of the circle
      circle.setRadius(25.0f);

      //Setting the color of the circle
      circle.setFill(Color.BROWN);

      //Setting the stroke width of the circle
      circle.setStrokeWidth(20);

      //Creating a Path
      Path path = new Path();

      //Moving to the staring point
      MoveTo moveTo = new MoveTo(208, 71);

      //Creating 1st line
      LineTo line1 = new LineTo(421, 161);

      //Creating 2nd line
      LineTo line2 = new LineTo(226,232);

      //Creating 3rd line
      LineTo line3 = new LineTo(332,52);

      //Creating 4th line
      LineTo line4 = new LineTo(369, 250);

      //Creating 5th line
      LineTo line5 = new LineTo(208, 71);

      //Adding all the elements to the path
      path.getElements().add(moveTo);
      path.getElements().addAll(line1, line2, line3, line4, line5);

      //Creating the path transition
      PathTransition pathTransition = new PathTransition();

      //Setting the duration of the transition
      pathTransition.setDuration(Duration.millis(1000));

      //Setting the node for the transition
      pathTransition.setNode(circle);

      //Setting the path for the transition
      pathTransition.setPath(path);

      //Setting the orientation of the path
      pathTransition.setOrientation(
         PathTransition.OrientationType.ORTHOGONAL_TO_TAN GENT);

      //Setting the cycle count for the transition
      pathTransition.setCycleCount(50);

      //Setting auto reverse value to true
      pathTransition.setAutoReverse(false);

      //Creating play button
      Button playButton = new Button("Play");
      playButton.setLayoutX(300);
      playButton.setLayoutY(250);

      circle.setOnMouseClicked (new EventHandler<javafx.scene.input.MouseEvent>() {
         @Override
         public void handle(javafx.scene.input.MouseEvent e) {
            System.out.println("Hello World");
            circle.setFill(Color.DARKSLATEBLUE);
         }
      });
      playButton.setOnMouseClicked((new EventHandler<MouseEvent>() {
         public void handle(MouseEvent event) {
            System.out.println("Hello World");
            pathTransition.play();
         }
      }));

      //Creating stop button
      Button stopButton = new Button("stop");
      stopButton.setLayoutX(250);
      stopButton.setLayoutY(250);

      stopButton.setOnMouseClicked((new EventHandler<MouseEvent>() {
         public void handle(MouseEvent event) {
            System.out.println("Hello World");
            pathTransition.stop();
         }
      }));
      //Creating a Group object
      Group root = new Group(circle, playButton, stopButton);

      //Creating a scene object
      Scene scene = new Scene(root, 600, 300);
      scene.setFill(Color.LAVENDER);

      //Setting title to the Stage
      stage.setTitle("Convenience Methods Example");

      //Adding scene to the stage
      stage.setScene(scene);

      //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls ConvenienceMethodsExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls ConvenienceMethodsExample

通过执行,上面的程序将产生一个 JavaFX 窗口,就像下面这样。在这里点击播放按钮以开始动画,并点击停止按钮以停止动画。

convenience method