Draw a String onto a ProgressBar, like JProgressBar?

前端 未结 1 955
南方客
南方客 2020-12-16 03:46

I recently started working with JavaFX, and started making FX versions of my custom Swing components. One of them was a count down timer, in which a JProgressBar

相关标签:
1条回答
  • 2020-12-16 04:37

    Here is a sample which (I think) does what your question is asking.

    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);
      }
    }
    

    A complete executable test harness is also available.

    Sample program output:

    labeledprogressbar

    0 讨论(0)
提交回复
热议问题