2012-12-27 6 views
7

私は最近、JavaFXでの作業を開始し、カスタムSwingコンポーネントのFX版を作成し始めました。それらの1つは、JProgressBarが関与したカウントダウンタイマーでした。私はそれを使用してバーに現在の時間を描画するsetString(String)メソッドです。残念ながら、JavaFXのProgressBarではそのようなメソッドがないようです。これは全く新しいカスタムコンポーネント、またはjava.awt.Graphicsのようなだけでクラスを必要とする場合、私は知らないJProgressBarのように、ProgressBarに文字列を描画しますか?

timersource

:私は、私が探していたものを見て最も近いものは、このでした。

ご協力いただければ幸いです。ありがとう:)

答えて

12

あなたの質問が何を求めているかは、(私が思う)サンプルです。

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

complete executable test harnessも利用可能である。

サンプルプログラムの出力:

labeledprogressbar

+0

これは私が探していたまさにです。ありがとうございました :) – mattbdean

関連する問題