2017-06-30 8 views
0

progressBarを作成しようとしています.1000msの遅延で0.1ステップで進捗を「満杯」に設定します。プログレスバーのsetProgressを0.1ステップで完全になるまで遅らせる方法

私はすでに1つのステップを遅らせる方法を見つけましたが、進行を1にしていっぱいになるまで0.1ステップで進捗を設定するforループには入りません。

これを達成するには、以下のソリューションをどのように変更する必要がありますか?

package project; 

import javafx.application.Application; 
import javafx.concurrent.Task; 
import javafx.concurrent.WorkerStateEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.ProgressBar; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class Progress extends Application { 

StackPane stack = new StackPane(); 
Scene scene = new Scene(stack, 400, 800); 

// Progress Bar 
ProgressBar progressBar = new ProgressBar(); 

public void start(Stage primaryStage) throws Exception { 

    // Progress Bar 
    stack.getChildren().add(progressBar); 
    progressBar.setTranslateX(0); 
    progressBar.setTranslateY(0); 

    progressBar.setProgress(0); 

    Task<Void> sleeper = new Task<Void>() { 
     @Override 
     protected Void call() throws Exception { 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
      } 
      return null; 
     } 
    }; 

    sleeper.setOnSucceeded(new EventHandler<WorkerStateEvent>() { 
     @Override 
     public void handle(WorkerStateEvent event) { 
      progressBar.setProgress(0.1); 
     } 
    }); 

    new Thread(sleeper).start(); 

    primaryStage.setScene(scene); 
    primaryStage.setTitle("Title"); 
    primaryStage.show(); 

} 

public static void main(String[] args) { 
    launch(); 
} 

} 

答えて

0

あなたのタスクは、反復処理を実行してください、それが行くように、それは進歩のアップデート:

Task<Void> sleeper = new Task<Void>() { 
    @Override 
    protected Void call() throws Exception { 

     final int numIterations = 10 ; 
     for (int i = 0 ; i < numIterations ; i++) { 
      updateProgress(i, numIterations); 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
      } 
     } 
     updateProgress(numIterations, numIterations); 
     return null; 
    } 
}; 

それからちょうどタスクの進行状況をプログレスバーの進捗状況をバインド:

progressBar.progressProperty().bind(sleeper.progressProperty()); 
+0

は完璧に動作します!ありがとうございました! –

関連する問題