2017-08-12 148 views
0

當按下按鈕時,我無法獲得此循環,並且釋放按鈕時停止循環。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"); 
    } 
}); 

回答

2
  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.stackoverflow.com/a/5235/163188)來接受答案。 – trashgod