我有一個JavaFX ListView。當我點擊列表中的一個項目時,我想要兩個...編輯控件,一個ComboBox和一個TextField,由模型中的相應值填充。無法將JavaFX TextField綁定到ListView值
首先,我的模型:
public class Recipient {
private final SimpleStringProperty type = new SimpleStringProperty();
private final SimpleStringProperty address = new SimpleStringProperty();
// property getters
}
在我的控制,我有:
public class Controller implements Initializable {
@FXML
private ComboBox type;
@FXML
private TextField address;
@FXML
private ListView<Recipient> recipList;
private final ObservableList<String> types = FXCollections.observableArrayList("SMS", "Email");
private final ObservableList<Recipient> recips = FXCollections.observableArrayList(Recipient.DUMMYDATA);
private final ObjectProperty<Recipient> recipient = new SimpleObjectProperty<>();
@Override
public void initialize(URL url, ResourceBundle rb) {
type.setItems(types);
recipList.setItems(recips);
recipList.setCellFactory((ListView<Recipient> p) -> new ListCell<Recipient>() {
@Override
public void updateItem(Recipient recip, boolean empty) {
super.updateItem(recip, empty);
final int index = p.getItems().indexOf(recip);
if (index > -1) {
setText(String.format("%s - %s", recip.typeProperty().get(), recip.addressProperty().get()));
} else {
setText(null);
}
}
});
recipient.setValue(new Recipient());
recipList.setOnMouseClicked(event -> recipClicked(event));
type.valueProperty().bindBidirectional(recipient.get().typeProperty());
address.textProperty().bindBidirectional(recipient.get().addressProperty());
}
public void recipClicked(MouseEvent event) {
final MultipleSelectionModel<Recipient> get = recipList.selectionModelProperty().get();
final Recipient selectedItem = get.getSelectedItem();
recipient.setValue(selectedItem);
}
}
當我點擊就行了,如預期的那樣SimpleObjectProperty被更新,但我的控制現在要做的顯示數據。我錯過了什麼?
,完美做到了。我也不是onMouseClick的粉絲,你也修正了這個問題。你真棒。 :) 非常感謝! – jasondlee