我想要实现的是在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());
}
答案 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();
}
绑定基本上执行以下操作:更改滑块,更改它绑定的任何内容。使用双向绑定时,它是双向的。例如。将滑块绑定到文本字段,两者都相互更新。