bitWalk's: ProgressIndicator と Thread を読み直していたら、自分で書いた記事にも関わらずコードが実に判りにくい。これは SWT のせいではなく、自分のプログラミングセンスの無さに違いないとガッカリします。
今回は、気を取り直して、JavaFX で同じようなことを確認するプログラムを紹介します。プログラムの判りやすさが少しでも改善していることを祈って…。なお、今回は二つのクラスに分けました。
動作環境は次の通りです。
- OS: WIndows 8.1 (64bit)
- Java: Java SE 1.8.0_40-b25
- IDE: NetBeans IDE 8.0.2
リスト:ProgressBarTest.java
package progressbartest; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.geometry.Pos; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.ProgressBar; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class ProgressBarTest extends Application { ProgressBar pb = new ProgressBar(0); @Override public void start(Stage stage) { Group root = new Group(); Scene scene = new Scene(root); stage.setScene(scene); stage.setTitle("ProgressBarTest"); Button bt = new Button("処理開始"); bt.setOnAction((ActionEvent e) -> { startWork(); }); VBox vb = new VBox(); vb.setSpacing(0); vb.setAlignment(Pos.CENTER); vb.getChildren().addAll(bt, pb); bt.prefWidthProperty().bind(vb.widthProperty()); bt.prefHeightProperty().bind(vb.heightProperty()); pb.prefWidthProperty().bind(vb.widthProperty()); scene.setRoot(vb); stage.show(); } void startWork() { DummyTask task = new DummyTask(); Thread th = new Thread(task); pb.progressProperty().bind(task.progressProperty()); th.setDaemon(true); th.start(); } public static void main(String[] args) { launch(args); } }
スレッドを処理するダミーの処理を以下に示します。
リスト:DummyTask.java
package progressbartest; import javafx.concurrent.Task; class DummyTask extends Task<Void> { @Override protected Void call() throws Exception { updateProgress(-1, 1); // dummy task long sleepTime = 5000; // milliseconds long startTime = System.currentTimeMillis(); long endTime = startTime + sleepTime; while (System.currentTimeMillis() < endTime) { if (isCancelled()) { break; } updateProgress(System.currentTimeMillis() - startTime, sleepTime); } updateProgress(1, 1); return null; } }
実行例を以下に示します。
DummyTask.java の 20 行目をコメントアウトすると、処理の進捗度を示さない表示になります。
参考サイト
- Using JavaFX UI Controls: Progress Bar and Progress Indicator | JavaFX 2 Tutorials and Documentation
- ProgressBar (JavaFX 8)
0 件のコメント:
コメントを投稿