代码之家  ›  专栏  ›  技术社区  ›  Woton Sampaio

设置“快速”点击-JavaFx

  •  -1
  • Woton Sampaio  · 技术社区  · 7 年前

    按钮 当点击它时,我可以从屏幕上移动它。问题是,当我拖放时,当我释放鼠标时,会调用单击事件,我尝试了:

    setOnMouseClicked setOnAction setOnMousePressed

    setOnLongClick

    前任:

    要移动,请执行以下操作:

    button.setOnMouseDragged(e -> {
         //code move
    });
    

    button.setOnMouseClicked/ Action / MousePressed (e -> {
        //call method
    });
    

    但是当我放下它时,它会调用setOnMouseClicked/Action/MousePressed,我想要的是,如果我快速点击,它会调用setOnMouseClicked/Action/MousePressed,当我放下拖放时,不要调用。

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  2
  •   Slaw    7 年前

    一种选择是跟踪 Button 被拖走了,;如果不是,则仅在 onAction

    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.geometry.Point2D;
    import javafx.scene.Group;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.input.MouseEvent;
    import javafx.stage.Stage;
    
    public class Main extends Application {
    
      private Point2D origin;
      private boolean wasDragged;
    
      @Override
      public void start(Stage primaryStage) {
        Button button = new Button("Drag me!");
        button.setOnAction(this::onAction);
        button.setOnMousePressed(this::onMousePressed);
        button.setOnMouseDragged(this::onMouseDragged);
        button.setOnMouseReleased(this::onMouseReleased);
    
        primaryStage.setScene(new Scene(new Group(button), 800, 600));
        primaryStage.show();
      }
    
      private void onAction(ActionEvent event) {
        event.consume();
    
        if (!wasDragged) {
          System.out.println("onAction");
        }
      }
    
      private void onMousePressed(MouseEvent event) {
        event.consume();
        origin = new Point2D(event.getX(), event.getY());
    
        System.out.println("onMousePressed");
      }
    
      private void onMouseDragged(MouseEvent event) {
        event.consume();
        wasDragged = true;
    
        Button source = (Button) event.getSource();
        source.setTranslateX(source.getTranslateX() + event.getX() - origin.getX());
        source.setTranslateY(source.getTranslateY() + event.getY() - origin.getY());
      }
    
      private void onMouseReleased(MouseEvent event) {
        event.consume();
        origin = null;
        wasDragged = false;
    
        System.out.println("onMouseReleased");
        System.out.println();
      }
    
    }
    

    不幸的是,我找不到保证 处理程序总是在 onMouseReleased 处理程序,但当我尝试它时,它在Java8U202和JavaFX11.0.2上都起作用。

    推荐文章