2012-12-27 32 views
7

मैंने हाल ही में जावाएफएक्स के साथ काम करना शुरू कर दिया है, और मेरे कस्टम स्विंग घटकों के एफएक्स संस्करण बनाना शुरू कर दिया है। उनमें से एक गिनती डाउन टाइमर था, जिसमें JProgressBar शामिल था। मैं वर्तमान समय को setString(String) विधि का उपयोग करके बार पर खींचूंगा। दुर्भाग्यवश, जावाएफएक्स के ProgressBar के साथ ऐसा कोई प्रतीत नहीं होता है। निकटतम बात मैं मैं के लिए क्या देख रहा था के लिए देखा था इस:एक प्रोग्रेसबार पर एक स्ट्रिंग ड्रा करें, जैसे जेपी प्रोग्रेसबार?

timer (source)

मैं अगर यह एक पूरी नई कस्टम घटक, या बस java.awt.Graphics की तरह एक वर्ग की आवश्यकता होगी पता नहीं है।

किसी भी मदद की बहुत सराहना की जाएगी। धन्यवाद :)

उत्तर

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

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^