【问题标题】:JavaFx - How to repeat action as long as button is pressedJavaFx - 只要按下按钮,如何重复操作
【发布时间】:2015-10-15 20:11:40
【问题描述】:

从 FXML 文件中,我调用了控制器的 up 函数。 只要按下按钮,我就想重复该动作。 我该如何存档。

这里以 up 函数为例

public void up() {
    gauge.setValue(gauge.getValue()+1);
    System.out.println("up");   
}

这里的部分

<Button fx:id="btnUp" layoutX="60.0" layoutY="15.0" mnemonicParsing="false" onMousePressed="#up" onMouseReleased="#up" styleClass="style_button_up">
   <font>
      <Font size="18.0" />
   </font>
</Button>
<Button fx:id="btnDown" layoutX="60.0" layoutY="60.0" mnemonicParsing="false" onMousePressed="#down" onMouseReleased="#down" styleClass="style_button_down">
   <font>
      <Font size="18.0" />
   </font>
</Button>

【问题讨论】:

    标签: button javafx action repeat


    【解决方案1】:

    您需要为此使用计时器并通过单击按钮来启动/停止它。

        final AnimationTimer timer = new AnimationTimer() {
    
            private long lastUpdate = 0;
    
            @Override
            public void handle(long time) {
                if (this.lastUpdate > 100) {
                    System.out.println("pressed");
                }
                this.lastUpdate = time;
            }
        };
    
        final Button b = new Button();
        b.addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() {
    
            @Override
            public void handle(MouseEvent event) {
                if (event.getEventType().equals(MouseEvent.MOUSE_PRESSED)) {
                    timer.start();
                } else {
                    timer.stop();
                }
    
            }
        });
    

    【讨论】:

      【解决方案2】:

      最好用这个解决方案

      final AnimationTimer timer = new AnimationTimer() {
      
                  private long lastUpdate = 0;
      
                  @Override
                  public void handle(long time) {
                      if (this.lastUpdate > 100) {
                          System.out.println(lastUpdate);
                      }
                      this.lastUpdate = time;
                  }
              };
      
              addEventFilter(MouseEvent.ANY, event -> {
                  if (event.getEventType() == MouseEvent.MOUSE_PRESSED)
                      timer.start();
                  if (event.getEventType() == MouseEvent.MOUSE_RELEASED) {
                      timer.stop();
                  }
      
              });
      

      【讨论】:

        猜你喜欢
        • 2016-04-24
        • 1970-01-01
        • 2012-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多