我对Java很陌生,想要摆脱Java FX中显示的ProgressIndicator百分比值。是否有禁用值显示的方法?我检查了documentation,但据我所知,找不到合适的方法。 谢谢你的帮助!!
答案 0 :(得分:2)
编辑文字值
由于用于显示进度值的Text
节点隐藏在ProgressIndicatorSkin
类的内部类中,因此访问它的最佳方法是使用查找,尝试通过其类型查找此节点percentage
。
此代码段只会移除%
字符。
private Text lookup;
@Override
public void start(Stage primaryStage) {
final Group root = new Group();
final ProgressIndicator indicator = new ProgressIndicator();
root.getChildren().add( indicator );
final Scene scene = new Scene( root );
final Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
IntStream.range(0, 1000).forEach( i ->{
updateProgress( i, 1000 );
try{ Thread.sleep(10); } catch(InterruptedException ie){}
});
return null;
}
};
indicator.progressProperty().bind( task.progressProperty() );
new Thread( task ).start();
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
indicator.progressProperty().addListener((obs,n,n1)->{
if(lookup==null){
lookup= (Text)root.lookup(".percentage");
}
lookup.setText(lookup.getText().replace("%", ""));
});
}
删除文字值
完全不同的问题是摆脱Text
节点。
有一个名为Text
的静态doneText
只是用来知道完成的大小,因为这是我们需要允许的最大文本
因此对lookup
节点的任何更改都不会影响整个控件的边界框。
更重要的是,鉴于Text
节点是Region
的子节点,子节点列表不可修改。
因此,我提出的解决方法就是剪掉指标。
private Text lookup;
@Override
public void start(Stage primaryStage) {
final VBox root = new VBox();
final ProgressIndicator indicator = new ProgressIndicator();
root.getChildren().addAll( new Group(indicator), new Button("Some Button") );
final Scene scene = new Scene( root );
final Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
IntStream.range(0, 1_000).forEach( i ->{
updateProgress( i, 1_000 );
try{ Thread.sleep(10); } catch(InterruptedException ie){}
});
return null;
}
};
indicator.widthProperty().addListener((obs,d,d1)->{
if(d.doubleValue()>0){
// Clip the indicator
Rectangle clip=new Rectangle(d1.doubleValue(),d1.doubleValue());
indicator.setClip(clip);
}
});
indicator.progressProperty().bind( task.progressProperty() );
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
new Thread( task ).start();
}
现在我们可以正确布局其他控件。
答案 1 :(得分:0)
通过在-16 ...处添加填充权来解决该问题。