2016-11-29 107 views
0

情況變化:有多個滑塊|希望進度條隨每個滑塊移動而改變。現在只有一個滑塊會移動進度條,但文本字段會顯示所有數據。JavaFX的進度/ ProgressIndicator:偵聽來自多個滑塊

有沒有更好的方法來做到這一點?

這裏是我的代碼:

@FXML 
ProgressIndicator pb; 

@FXML 
Slider slider1, slider2, slider3, slider4, slider5, slider6, slider7, slider8; 

@Override 
public void initialize(URL location, ResourceBundle resources) { 

    field.textProperty().bind(Bindings.concat(
      slider1.valueProperty() 
      .add(slider2.valueProperty() 
      .add(slider3.valueProperty() 
      .add(slider4.valueProperty() 
      .add(slider5.valueProperty() 
      .add(slider6.valueProperty() 
      .add(slider7.valueProperty() 
      .add(slider8.valueProperty()))))))))); 

     slider1.valueProperty().addListener(
      (ObservableValue<? extends Number> ov, Number old_val, 
      Number new_val) -> { 
        //sets the Progress bar to new value 
       pb.setProgress(new_val.doubleValue()); 


      }); 
      } 

     } 

slider example

+0

爲什麼你需要多個滑塊來控制只有一個進度條? –

+0

例如:如果我有4個滑塊我想每個滑塊代表進度條的25%。所有四個滑塊組合在全部達到最大值時將代表100%。我特別想用這種格式來製作我正在使用的視覺測量儀。 – Brown

回答

1

您可以將ProgressIndicatorprogressProperty簡單地綁定到Slider S的valueProperty同時牢記該指標的progressProperty有邊界爲0到1:

0和1之間的正值表示pe的進展 rcentage其中0爲0%和1爲100%。

一個例子:

Slider slider1 = new Slider(0d, 1d, 0d); 
Slider slider2 = new Slider(0d, 1d, 0d); 
Slider slider3 = new Slider(0d, 1d, 0d); 
Slider slider4 = new Slider(0d, 1d, 0d); 

ProgressIndicator pi = new ProgressIndicator(); 

pi.progressProperty().bind(slider1.valueProperty().divide(4d).add(slider2.valueProperty().divide(4d)) 
     .add(slider3.valueProperty().divide(4d)).add(slider4.valueProperty().divide(4d))); 

VBox vbox = new VBox(); 
vbox.getChildren().addAll(slider1, slider2, slider3, slider4, pi); 

這會產生這樣的事情:

enter image description here

注:如果更新Slider S的界限,從0至0.25,所述結合是即使是簡單的:

Slider slider1 = new Slider(0d, 0.25d, 0d); 
Slider slider2 = new Slider(0d, 0.25d, 0d); 
Slider slider3 = new Slider(0d, 0.25d, 0d); 
Slider slider4 = new Slider(0d, 0.25d, 0d); 

ProgressIndicator pi = new ProgressIndicator(); 

pi.progressProperty().bind(slider1.valueProperty().add(slider2.valueProperty()) 
     .add(slider3.valueProperty()).add(slider4.valueProperty())); 
+0

一個問題:如何將我它在場景構建器XML頁面整合VS ... vbox.getChildren()中的addAll ...? – Brown

+0

計算出來: – Brown

+0

找出解決方案: 1.更新場景生成器中的邊界 2.然後綁定進度條和滑塊 – Brown