2016-12-26 76 views
0

所以我創建了Instrument類和Controller類。我用bindingBidirectional()方法遇到很大問題。當我試圖在Instrument類中綁定Combobox屬性與AmountProperty時,它給了我一個錯誤。[JavaFx]這個綁定有什麼問題?

amount.valueProperty().bindBidirectional(instrument.amountProperty()); 

我在做什麼錯在這裏?

Controller class

public class Controller implements Initializable{ 

@FXML 
private ComboBox<Integer> amount = new ComboBox<>(); 
ObservableList<Integer> amountOptions = FXCollections.observableArrayList(0, 5, 10, 25, 50); 

Instrument instrument = new Instrument(); 

@Override 
public void initialize(URL location, ResourceBundle resources) { 

    amount.getItems().addAll(amountOptions); 
    //THIS ONE IS NOT WORKING 
    amount.valueProperty().bindBidirectional(instrument.amountProperty()); 

}} 

而且Instrument類:

public class Instrument { 

private IntegerProperty amount = new SimpleIntegerProperty(); 

public int getAmount() { 
    return amount.get(); 
} 

public IntegerProperty amountProperty() { 
    return amount; 
} 

public void setAmount(int amount) { 
    this.amount.set(amount); 
} 
} 
+0

你得到什麼錯誤? – assylias

+0

請參閱http://stackoverflow.com/questions/24889638/javafx-properties-in-tableview –

+0

java:找不到適用於bindBidirectional的方法(javafx.beans.property.IntegerProperty) 方法javafx.beans.property.Property.bindBidirectional (javafx.beans.property.Property )不適用 (參數不匹配; javafx.beans.property.IntegerProperty不能轉換爲javafx.beans.property.Property ) 方法 – Rocky3582

回答

1

IntegerPropertyProperty<Number>的實現,而不是Property<Integer>。您的組合框中的valuePropertyProperty<Integer>。因此,不能直接在兩者之間進行雙向綁定,因爲類型不匹配。

你可以改變你的組合框是一個ComboBox<Number>,或使用IntegerProperty.asObject(),它創建了一個ObjectProperty<Integer>是雙向綁定到IntegerProperty

amount.valueProperty().bindBidirectional(
    instrument.amountProperty().asObject()); 
+0

非常感謝你,現在我明白了:) – Rocky3582

+0

@ Rocky3582如果回答你的問題,請標記爲正確的答案 –