2016-03-25 12 views
-1

私が達成しようとしているのは、スライドバーの現在の値を処理できるinitializeメソッドの隣にメソッドを作成することです。そのメソッドが値をタイムラインに戻すようにしたい。私が直面している問題は、スライダを処理し、その変更が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(); 
}  

バインディングは基本的に次のようになります。バインダーは、バインドされているものを変更します。双方向バインディングを使用する場合、両方向に移動します。例えば。スライダをテキストフィールドにバインドし、両方とも互いに更新します。

関連する問題