javafx循环while按钮按下

问题描述:

当按下按钮时,我无法获得此循环,并且释放按钮时停止循环。javafx循环while按钮按下

btnUp.pressedProperty().addListener((observable, wasPressed, pressed) -> { 
    System.out.println("changed"); 
    if (pressed) { 
     System.out.println("pressed"); 
     while(btnUp.isArmed()){ 
      try   
      { 
       Thread.sleep(1000); 
      } 
      catch(InterruptedException ex) 
      { 
       Thread.currentThread().interrupt(); 
      } 
      //moveflag = false; 
      System.out.println("pressed"); 
     } 
    } else { 
     System.out.println("released"); 
    } 
}); 

  1. 不要使用Thread.sleep()方法的UI操作中,它会阻止所有UI绘制
  2. 不同时里面的ChangeListener使用,只是有一个独立的循环,检查按钮的状态
  3. 时间表最适合这样的循环

    public void start(Stage stage) { 
    Button btn = new Button("Press me"); 
    
    Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(1), (ActionEvent event) -> { 
        // this code will be called every second 
        System.out.println(btn.isPressed() ? "pressed" : "released"); 
    })); 
    timeline.setCycleCount(Timeline.INDEFINITE); 
    timeline.play(); 
    
    
    StackPane root = new StackPane(); 
    root.getChildren().add(btn); 
    
    Scene scene = new Scene(new StackPane(btn), 300, 250); 
    stage.setTitle("Hello World!"); 
    stage.setScene(scene); 
    stage.show(); 
    

    }

+0

谢谢,它像一个魅力工作! –

+0

@Folieadeux:您可以点击左侧的[空勾号](http://meta.*.com/a/5235/163188)来接受答案。 – trashgod