Javafx 简明教程

JavaFX - Using Convenience Methods

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

Event handlers are simply defined as the actions that are to be occurred after an event has taken place. These event handlers can be registered in order to handle more complex events; and you can use convenience methods to register event handlers within your JavaFX application. Event handlers can be created and registered in order to respond to events like mouse events, keyboard events, window events etc.

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

Some JavaFX classes define event handler properties, which provide a way to register event handlers. Setting an event handler property to a user-defined event handler automatically registers the handler to receive the corresponding event type. The setter methods for the event handler properties are convenience methods for registering event handlers.

Using Convenience Methods for Event Handling

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

Some of the classes in JavaFX define event handler properties. By setting the values to these properties using their respective setter methods, you can register to an event handler. These methods are known as convenience methods.

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

Most of these methods exist in the classes like Node, Scene, Window, etc., and they are available to all their sub classes. Following table describes various convenience methods that can be used on different events:

User Action

Event Type

EventHandler Properties

Pressing, releasing, or typing a key on keyboard.

KeyEvent

onKeypressed onKeyReleased onKeyTyped

Moving, Clicking, or dragging the mouse.

MouseEvent

onMouseClicked onMouseMoved onMousePressed onMouseReleased onMouseEntered onMouseExited

Pressing, Dragging, and Releasing of the mouse button.

MouseDragEvent

onMouseDragged onMouseDragEntered onMouseDragExited onMouseDragged onMouseDragOver onMouseDragReleased

Generating, Changing, Removing or Committing input from an alternate method.

InputMethodEvent

onInputMethodTextChanged

Performing Drag and Drop actions supported by the platform.

DragEvent

onDragDetected onDragDone onDragDropped onDragEntered onDragExited onDragOver

Scrolling an object.

ScrollEvent

onScroll onScrollStarted onScrollFinished

Rotating an object.

RotateEvent

onRotate onRotationFinished onRotationStarted

Swiping an object upwards, downwards, to the right and left.

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

Pressing a button, showing or hiding a combo box, selecting a menu item.

ActionEvent

Editing an item in a list.

ListView.EditEvent

Editing an item in a table.

TableColumn.CellEditEvent

Editing an item in a tree.

TreeView.EditEvent

Encountering an error in a media player.

MediaErrorEvent

Showing or Hiding Menu.

Event

Hiding a pop-up window.

Event

Selecting or Closing a Tab.

Event

Showing, Minimizing, or Closing a Window.

WindowEvent

Syntax

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

Following is the format of Convenience methods used for registering event handlers:

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

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

For example, to add a mouse event listener to a button, you can use the convenience method setOnMouseClicked() as shown below.

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

Example

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

The following program is an example that demonstrates the event handling in JavaFX using the convenience methods.

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

Save this code in a file with the name 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 文件。

Compile and execute the saved java file from the command prompt using the following commands.

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

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

On executing, the above program generates a JavaFX window as shown below. Here click on the play button to start the animation and click on the stop button to stop the animation.

convenience method