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

在javaFX中创建一个简单的滑块,javafx,slider,type-conversion,Javafx,Slider,Type Conversion,我试图实现的是在initialize方法旁边创建一个方法,该方法可以处理滑块的当前值。我希望该方法将值传递回时间线。我面临的问题是,处理滑块及其更改的方法是void方法,但我需要double类型的值 我很难理解addlistener的概念以及Observable、ObservableValue、InvalizationListener和ChangeListener之间的区别 /*DATA FIELD*/ private double cycle; private Timeline loop;

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

我很难理解addlistener的概念以及Observable、ObservableValue、InvalizationListener和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());
}

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

@FXML
private Label label;

@FXML
private Slider slider;

@Override
public void initialize(URL url, ResourceBundle rb) {
    label.textProperty().bindBidirectional(slider.valueProperty(), new NumberStringConverter());
}    
在您的具体案例中,您可以将其绑定到双重属性。您可以执行以下操作:

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();
}    
绑定基本上执行以下操作:更改滑块,更改它绑定到的任何对象。当使用双向绑定时,它是双向的。例如,将滑块绑定到文本字段,两者都会相互更新