JavaFX - 使用便捷方法



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

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

使用便捷方法进行事件处理

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

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

用户操作 事件类型 事件处理程序属性
按下、释放或在键盘上键入键。 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

滚动对象。 ScrollEvent

onScroll

onScrollStarted

onScrollFinished

旋转对象。 RotateEvent

onRotate

onRotationFinished

onRotationStarted

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

onSwipeUP

onSwipeDown

onSwipeLeft

onSwipeRight

触摸对象。 TouchEvent

onTouchMoved

onTouchReleased

onTouchStationary

缩放对象。 ZoomEvent

onZoom

onZoomStarted

onZoomFinished

请求上下文菜单。 ContextMenuEvent onContextMenuRequested
按下按钮、显示或隐藏组合框、选择菜单项。 ActionEvent
编辑列表中的项目。 ListView.EditEvent
编辑表格中的项目。 TableColumn.CellEditEvent
编辑树中的项目。 TreeView.EditEvent
在媒体播放器中遇到错误。 MediaErrorEvent
显示或隐藏菜单。 Event
隐藏弹出窗口。 Event
选择或关闭选项卡。 Event
显示、最小化或关闭窗口。 WindowEvent

语法

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

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

示例

以下程序是一个示例,演示了使用便捷方法在 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
广告