2013-01-04 19 views
6

मैं स्लाइडर पर प्रोग्रेसबार पर क्लिक करना चाहता हूं। और ट्रैक का एक प्रतिशत सीखो। मैं स्लाइडर के बजाय स्लाइडर का उपयोग करूंगा लेकिन अंगूठे तक इसका एक हाइलाइट ट्रैक नहीं है।स्लाइडर का हाइब्रिड जावाएफएक्स

मुझे गाने बजाने के संगीत खिलाड़ी में प्रगति की तरह कुछ और प्रगति पर एक क्लिक की तलाश करने की आवश्यकता है।

क्या किसी के पास कोई सुझाव है कि मैं इसे कैसे कर सकता हूं?

+0

[क्या आप की कोशिश की है?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+0

मैं सीएसएस के साथ एक अनुकूलन पता लगाने की कोशिश । लेकिन गूगल ने कुछ भी नहीं दिया। प्रलेखन में अंगूठे और ट्रैक जैसे प्रतिस्थापन के लिए एक सीएसएस संदर्भ नहीं है। – Vetalll

उत्तर

16

यहाँ एक और तरीका है। स्लाइडर और प्रगति पट्टी का असली संकर :)। Slido प्रोग्रेसबार से मिलें!

public class SlidoProgressBarDemo extends Application { 

    @Override 
    public void start(Stage stage) { 
     Group root = new Group(); 
     Scene scene = new Scene(root); 
     scene.getStylesheets().add(this.getClass().getResource("style.css").toExternalForm()); 
     stage.setScene(scene); 
     stage.setTitle("Progress Controls"); 

     double sliderWidth = 200; 

     final Slider slider = new Slider(); 
     slider.setMin(0); 
     slider.setMax(50); 
     slider.setMinWidth(sliderWidth); 
     slider.setMaxWidth(sliderWidth); 

     final ProgressBar pb = new ProgressBar(0); 
     pb.setMinWidth(sliderWidth); 
     pb.setMaxWidth(sliderWidth); 

     final ProgressIndicator pi = new ProgressIndicator(0); 

     slider.valueProperty().addListener(new ChangeListener<Number>() { 
      public void changed(ObservableValue<? extends Number> ov, 
        Number old_val, Number new_val) { 
       pb.setProgress(new_val.doubleValue()/50); 
       pi.setProgress(new_val.doubleValue()/50); 
      } 
     }); 

     StackPane pane = new StackPane(); 

     pane.getChildren().addAll(pb, slider); 

     final HBox hb = new HBox(); 
     hb.setSpacing(5); 
     hb.setAlignment(Pos.CENTER); 
     hb.getChildren().addAll(pane, pi); 

     scene.setRoot(hb); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
style.css साथ

:

.slider .track { 
    -fx-background-color:null; /* Hide the track */ 
    -fx-background-insets: 1 0 -1 0, 0, 1; 
    -fx-background-radius: 2.5, 2.5, 1.5; 
    -fx-padding: 0.208333em; /* 2.5 */ 
} 

बुनियादी तर्क stackpane में स्लाइडर और प्रगति कर देना है। उन्हें एक ही चौड़ाई दें। उनके प्रगति मूल्यों को बांधें। स्लाइडर का ट्रैक छुपाएं।
आउटपुट:
enter image description here

+0

हाहा, मैंने इसके बारे में सोचा। लेकिन मुझे लगता है कि यह यादृच्छिक मौका के साथ काम करेगा। आप कैसे जानते हैं कि आप कहां क्लिक करते हैं? स्लाइडर या पीबी पर? – Vetalll

+0

@ Vetal.lebed। स्टैकपैन ने अपने बच्चों को एक दूसरे को ओवरलैप किया ताकि अंतिम जोड़ा बच्चा दूसरों के शीर्ष पर हो। इस प्रकार यह हमेशा स्लाइडर (और इसका अदृश्य ट्रैक) होता है जो माउस क्लिक करता है। इसके अलावा प्रगति पट्टी डिफ़ॉल्ट रूप से क्लिक करने योग्य नहीं है। –

+0

धन्यवाद, मुझे यह नहीं पता था। मैं एक एंड्रॉइड डेवलपर हूँ। – Vetalll

1

मैं कोड के साथ इस समस्या का समाधान:

progress.setOnMouseClicked(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent event) { 
      if (event.getButton() == MouseButton.PRIMARY){ 
       Bounds b1 = progress.getLayoutBounds(); 
       double mouseX = event.getSceneX(); 
       double percent = (((b1.getMinX() + mouseX) * 100)/b1.getMaxX()); 
       //correcting a percent, i don't know when it need 
       percent -= 2; 
       progress.setProgress((percent)/100); 
       //do something with progress in percent 
      } 
     } 
    }); 
संबंधित मुद्दे