JavaFX Slider 反映与 Progress Bar 相同的值
JavaFX Slider reflect the same value as Progress Bar
情况:
- 需要滑块(绑定到 Progress Bar )在标签上反映 0 到 100%。
- 目前只能得到0到1体现在标签上。参见示例。
- 我正在为滑块使用 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>
ProgressBar
和 ProgressIndicator
的最小值为 -1,最大值为 1。
因此,如果您的 JFoenixProgressBar
具有最小值 0 和最大值 1,它就可以正常工作。
一般来说,你的 ProgressIndicator
的值应该是:
double indicatorValue=foenixProgressBarMaximumValue/foenixProgressBarCurrentValue;
如果 foenixProgressBarCurrentValue
是 0.Let,还要添加一个三元表达式:
double indicatorValue=((foenixProgressBarCurrentValue!=0)?foenixProgressBarMaximumValue/foenixProgressBarCurrentValue:0);
要使其作为绑定工作,您可以将其设为 DoubleProperty
或使用 Bindings
class 方法。
提到上面如果最小和最大都为0需要修改
情况:
- 需要滑块(绑定到 Progress Bar )在标签上反映 0 到 100%。
- 目前只能得到0到1体现在标签上。参见示例。
- 我正在为滑块使用 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>
ProgressBar
和 ProgressIndicator
的最小值为 -1,最大值为 1。
因此,如果您的 JFoenixProgressBar
具有最小值 0 和最大值 1,它就可以正常工作。
一般来说,你的 ProgressIndicator
的值应该是:
double indicatorValue=foenixProgressBarMaximumValue/foenixProgressBarCurrentValue;
如果 foenixProgressBarCurrentValue
是 0.Let,还要添加一个三元表达式:
double indicatorValue=((foenixProgressBarCurrentValue!=0)?foenixProgressBarMaximumValue/foenixProgressBarCurrentValue:0);
要使其作为绑定工作,您可以将其设为 DoubleProperty
或使用 Bindings
class 方法。
提到上面如果最小和最大都为0需要修改