JavaFX Slider 反映与 Progress Bar 相同的值

JavaFX Slider reflect the same value as Progress Bar

情况:

  1. 需要滑块(绑定到 Progress Bar )在标签上反映 0 到 100%。
  2. 目前只能得到0到1体现在标签上。参见示例。
  3. 我正在为滑块使用 JFoenix 库。

代码如下: public class 控制器实现 Initializable{

 @FXML
private ProgressBar mProgress1, mProgress2;

@FXML
private ProgressIndicator mProgressIndicator;

@FXML
private JFXSlider mSlider1 , mSlider2;

@FXML
private TextField mTextField;
@FXML
private Label mLabel;

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



   mTextField.textProperty().bindBidirectional(mSlider1.valueProperty(),
           NumberFormat.getNumberInstance());
           mLabel.textProperty().bind(mTextField.textProperty().concat("%"));



  mProgress1.progressProperty().bind(mSlider1.valueProperty());
  mProgress2.progressProperty().bind(mSlider2.valueProperty());



  mProgressIndicator.progressProperty().bind(mProgress1.progressProperty());
   }
}

xml:

<AnchorPane prefHeight="564.0" prefWidth="372.0" 
    xmlns="http://javafx.com/javafx/8.0.112"  
    xmlns:fx="http://javafx.com/fxml/1" 
    fx:controller="sample.Controller">
   <children>
      <AnchorPane fx:id="lowerPane" layoutX="6.0" layoutY="353.0" 
             prefHeight="211.0" prefWidth="361.0">
         <children>
            <ProgressBar fx:id="mProgress1" layoutX="78.0" layoutY="155.0"
                             prefWidth="205.0" progress="0.0" />
            <ProgressBar fx:id="mProgress2" layoutX="84.0" layoutY="137.0" 
        prefWidth="193.0" progress="0.0" />
           <Label fx:id="mLabel" layoutX="148.0" layoutY="189.0" text=" 
            Progress" />
          </children></AnchorPane>
      <TextField fx:id="mTextField" layoutX="286.0" layoutY="270.0" 
    prefHeight="25.0" prefWidth="78.0" />
      <ProgressIndicator fx:id="mProgressIndicator" layoutX="313.0"  
           layoutY="301.0" 
    progress="0.0" />
      <JFXSlider fx:id="mSlider1" blockIncrement="0.0" 
              indicatorPosition="RIGHT" 
    layoutX="116.0" layoutY="275.0" max="1.0" />
      <JFXSlider fx:id="mSlider2" layoutX="116.0" layoutY="233.0" max="1.0" 
    value="0.1" />
   </children>
</AnchorPane>

ProgressBarProgressIndicator 的最小值为 -1,最大值为 1。

因此,如果您的 JFoenixProgressBar 具有最小值 0 和最大值 1,它就可以正常工作。

一般来说,你的 ProgressIndicator 的值应该是:

double indicatorValue=foenixProgressBarMaximumValue/foenixProgressBarCurrentValue;

如果 foenixProgressBarCurrentValue 是 0.Let,还要添加一个三元表达式:

double indicatorValue=((foenixProgressBarCurrentValue!=0)?foenixProgressBarMaximumValue/foenixProgressBarCurrentValue:0);

要使其作为绑定工作,您可以将其设为 DoubleProperty 或使用 Bindings class 方法。

提到上面如果最小和最大都为0需要修改