2013-01-04 77 views
6

我想處理像滑塊一樣點擊ProgressBar。並學習百分比的軌道。 我會使用滑塊代替進度條,但它沒有突出顯示的軌道,直到拇指。滑塊與進度條的混合JavaFX

我需要在播放歌曲的音樂播放器中創建類似進度的內容,並且可以通過點擊進度來進行搜索。

有人有提示我該怎麼做?

+0

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+0

我試圖找到與CSS定製。但谷歌什麼也沒給。文檔沒有象拇指和軌道這樣的子結構的CSS引用。 – Vetalll

回答

16

這是另一種方法。真正的滑塊和進度條的混合:)。認識SlidoProgressBar!

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

哈哈,我想過了。但我認爲它會隨機運作。你怎麼知道你點擊的地方?在滑塊或PB? – Vetalll

+0

@ Vetal.lebed。 Stackpane將其孩子彼此重疊,以便最後添加的孩子位於其他孩子的頂部。因此它始終是滑塊(和它的不可見的軌道),它會點擊鼠標。此外默認情況下進度條不可點擊。 –

+0

謝謝,我不知道。我是一名android開發人員。 – 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 
      } 
     } 
    });