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 件のコメント:
コメントを投稿