2016-03-25 27 views
-1

我想要實現的是在初始化方法旁邊創建一個方法,該方法可以處理滑動條的當前值。我希望該方法將值傳遞迴時間軸。我面臨的問題是,處理滑塊的方法以及更改時的方法是void方法,但是我需要double類型的值。在javaFX中創建一個簡單的滑塊

我很難理解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

一個很好的方法是使用屬性綁定來代替。您可以綁定滑塊的值,以更新任何其他字段。將滑塊綁定到標籤上的示例:

@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(); 
}  

的基本結合執行以下操作:更改滑塊,無論它是必然要改變。使用雙向綁定時,雙向綁定。例如。將滑塊綁定到文本字段,兩者都會相互更新。