在javaFX中创建一个简单的滑块

时间:2016-03-25 17:38:44

标签: javafx slider type-conversion

我想要实现的是在initialize方法旁边创建一个方法,该方法可以处理滑块的当前值。我希望该方法将值传回时间轴。我面临的问题是处理滑块的方法及其更改时的方法是void方法,但我需要双重类型的值。

我很难理解addlistener的概念以及Observable,ObservableValue,InvalidationListener和ChangeListener之间的区别。

/*DATA FIELD*/

private double cycle;
private Timeline loop;

@FXML
private Slider slider1;


/*METHODS*/

@FXML
public double frequency(){
slider1.valueProperty().addListener(new InvalidationListener(){

@Override
public void invalidated(Observable observable){
cycle = slider1.setValue(slider1.getValue());
}});
return cycle;

public void initialize(URL url, ResourceBundle rb) {
slider1 = new Slider(100, 3000, 500);
loop = new Timeline(new KeyFrame(Duration.millis(cycle), (ActionEvent event) -> {
        gb.nextGen(gb.getBoard());
        graphic.draw(gb.getBoard());
}

1 个答案:

答案 0 :(得分:0)

执行此操作的好方法是使用属性绑定。您可以绑定滑块的值,以更新任何其他字段。将滑块绑定到标签的示例:

@FXML
private Label label;

@FXML
private Slider slider;

@Override
public void initialize(URL url, ResourceBundle rb) {
    label.textProperty().bindBidirectional(slider.valueProperty(), new NumberStringConverter());
}    

在具体案例中,您可以将其绑定到double属性。您可以执行以下操作:

private final DoubleProperty doubleProperty = new SimpleDoubleProperty();

@FXML
private Slider slider;

@Override
public void initialize(URL url, ResourceBundle rb) {
    doubleProperty.bind(slider.valueProperty());
    //When you're in need to pass the primitive forward, get it from the property
    doubleProperty.get();
}    

绑定基本上执行以下操作:更改滑块,更改它绑定的任何内容。使用双向绑定时,它是双向的。例如。将滑块绑定到文本字段,两者都相互更新。