我想根据ComboBox中选定的项目设置TextField的文本
答案 0 :(得分:0)
据我所知,您想根据TextField
中选定的项目设置ComboBox
的文本。可能您只是在使用,正如您在注释中提到的那样:personnelcongetxt.setText(String.valueOf(personneList.getValue()));
,这不会在您每次选择其他项目时更新您的价值。由于默认选择(如果未设置)为null,因此它始终为null,因此它在Textfield
中“打印”为null。如果要更新,有两种方法:
代码如下:
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的值,但之后您可以随时编辑文本字段,并且可以更改文本到任何字符串。因此,如果要使用此功能,则应采用这种方式。
长话短说:绑定始终显示选定的项目,而侦听器仅在选择新项目后显示。