mat*_*ean 8 java string javafx jprogressbar progress-bar
我最近开始使用JavaFX,并开始制作我的自定义Swing组件的FX版本.其中一个是倒计时器,其中JProgressBar涉及一个.我会使用它的setString(String)方法将当前时间绘制到条形图上.不幸的是,JavaFX似乎没有这样的方法ProgressBar.我看到的最接近我正在寻找的是:
(来源)
我不知道这是否需要一个全新的自定义组件,或者只是一个类java.awt.Graphics.
任何帮助将非常感激.谢谢 :)
jew*_*sea 14
这是一个样本(我认为)做了你的问题.
class ProgressIndicatorBar extends StackPane {
final private ReadOnlyDoubleProperty workDone;
final private double totalWork;
final private ProgressBar bar = new ProgressBar();
final private Text text = new Text();
final private String labelFormatSpecifier;
final private static int DEFAULT_LABEL_PADDING = 5;
ProgressIndicatorBar(final ReadOnlyDoubleProperty workDone, final double totalWork, final String labelFormatSpecifier) {
this.workDone = workDone;
this.totalWork = totalWork;
this.labelFormatSpecifier = labelFormatSpecifier;
syncProgress();
workDone.addListener(new ChangeListener<Number>() {
@Override public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
syncProgress();
}
});
bar.setMaxWidth(Double.MAX_VALUE); // allows the progress bar to expand to fill available horizontal space.
getChildren().setAll(bar, text);
}
// synchronizes the progress indicated with the work done.
private void syncProgress() {
if (workDone == null || totalWork == 0) {
text.setText("");
bar.setProgress(ProgressBar.INDETERMINATE_PROGRESS);
} else {
text.setText(String.format(labelFormatSpecifier, Math.ceil(workDone.get())));
bar.setProgress(workDone.get() / totalWork);
}
bar.setMinHeight(text.getBoundsInLocal().getHeight() + DEFAULT_LABEL_PADDING * 2);
bar.setMinWidth (text.getBoundsInLocal().getWidth() + DEFAULT_LABEL_PADDING * 2);
}
}
Run Code Online (Sandbox Code Playgroud)
一个完整的可执行测试工具也可以.
示例程序输出:
