我想在 TilePane 中加载最多九个面板。对于每个窗格,我必须首先运行内容计算(大约 300 毫秒),然后必须构建面板(大约 500 毫秒)。
我想要的是,有九个 ProgressIndicators 在计算后与每个面板进行交换。
我尝试过Platform.runLater
命令以及服务类。结果总是一样的。显示 ProgressIndicator,但不显示动画。几秒钟后,所有面板立即出现。
是否有可能指标始终处于动画状态并且我可以依次交换它们?
JavaFX 有用于 UI 事件的事件调度线程。所有与 UI 相关的工作都应该在此线程上进行。并且非 UI 计算不应该发生在那里,以避免 UI 中的滞后。
看下一个代码:
public class Indicators extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
Pane root = new HBox();
stage.setScene(new Scene(root, 300, 100));
for (int i = 0; i < 10; i++) {
final ProgressIndicator pi = new ProgressIndicator(0);
root.getChildren().add(pi);
// separate non-FX thread
new Thread() {
// runnable for that thread
public void run() {
for (int i = 0; i < 20; i++) {
try {
// imitating work
Thread.sleep(new Random().nextInt(1000));
} catch (InterruptedException ex) {
ex.printStackTrace();
}
final double progress = i*0.05;
// update ProgressIndicator on FX thread
Platform.runLater(new Runnable() {
public void run() {
pi.setProgress(progress);
}
});
}
}
}.start();
}
stage.show();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)