Насколько я понимаю вашу проблему, вы хотите установить текст TextField
в зависимости от выбранного элемента в ComboBox
.Возможно, вы просто используете, как вы упомянули в комментарии: personnelcongetxt.setText(String.valueOf(personneList.getValue()));
, который не будет обновлять ваше значение каждый раз, когда вы выбираете другой элемент.Он всегда равен нулю, так как выбор по умолчанию (если вы не установили) равен нулю, поэтому он печатает ноль в Textfield
.Если вы хотите получить обновление, есть два способа:
- Использование привязок.
- Использование слушателя.
Вот код:
public class Controller implements Initializable {
@FXML
private ComboBox<Model> cb;
@FXML
private TextField tf;
@Override
public void initialize(URL location, ResourceBundle resources) {
initCB();
// Solution one : using bindings :
tf.textProperty().bind(Bindings.when(cb.getSelectionModel().selectedItemProperty().isNull())
.then("")
.otherwise(cb.getSelectionModel().selectedItemProperty().asString())); // uses toString of the Model
// Solution two using listener :
// cb.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
// tf.setText(newValue.toString()); // or newValue.getName();
// });
}
private void initCB() {
cb.setItems(FXCollections
.observableArrayList(new Model("Apple"), new Model("Banana"), new Model("")));
}
private class Model {
private String name;
public Model(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return name;
}
}
}
В зависимости от вашего выбора результат может быть немного другим.
Если вы используете первое решение (привязки), вы не сможете изменить «вручную», введя текст текстового поля, но вы можете быть уверены, что TextField
показывает каждый раз, когда выбранный элемент комбинированного списка.
Если вы используете второе решение (слушатель), то значение textField обновляется после выбора нового элемента,но после этого он позволяет редактировать текстовое поле в любое время, и вы можете изменить текст на любую строку.Так что если вы хотите эту функциональность, то вы должны пойти по этому пути.
Короче говоря: привязки показывают всегда выбранный элемент, слушатель показывает только после выбора нового элемента.