Ich habe eine JavaFX ListView. Wenn ich auf ein Element in der Liste klicke, möchte ich, dass zwei ... Edit-Steuerelemente, eine ComboBox und ein TextField, mit den entsprechenden Werten aus dem Modell gefüllt werden.Kann JavaFX TextField nicht an ListView-Wert binden
Zuerst mein Modell:
public class Recipient {
private final SimpleStringProperty type = new SimpleStringProperty();
private final SimpleStringProperty address = new SimpleStringProperty();
// property getters
}
In meinem Controller, ich habe:
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);
}
}
Wenn ich auf der Liste klicken, wird der SimpleObjectProperty aktualisiert, wie erwartet, aber meine Kontrollen jetzt zeigen die Daten. Was vermisse ich?
, dass es tat perfekt. Ich war auch kein Fan von onMouseClicked, und das hast du währenddessen behoben. Du bist unglaublich. :) Danke vielmals! – jasondlee