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 窗口,就像下面这样。在这里点击播放按钮以开始动画,并点击停止按钮以停止动画。