添加新值后,我想刷新选择框。
我阅读了我在stackoverflow上发现的所有与此相关的主题,但这些主题均无效。
public void setNamesChoiceBoxes() {
ArrayList<Worker> workers = new ArrayList<>();
ArrayList<String> names = new ArrayList<>();
workers = db.getWorkers();
for (Worker i : workers) {
String tmp = i.getName() + " (" + i.getID() + ")";
names.add(tmp);
}
ArrayList<String> searchNames = new ArrayList<>(names);
searchNames.add(0, "All");
ObservableList<String> search = FXCollections.observableList(searchNames);
searchNameChoiceBox.setItems(search);
searchNameChoiceBox.setValue(search.get(0));
ArrayList<String> addNames = new ArrayList<>(names);
addNames.add(0, "");
ObservableList<String> add = FXCollections.observableList(addNames);
addNameChoiceBox.setItems(add);
addNameChoiceBox.setValue(add.get(0));
}
@Override
public ArrayList<Worker> getWorkers() {
ArrayList<Worker> workers = new ArrayList<>();
String sql = "select * from names";
try {
ResultSet rs = statement.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
workers.add(new Worker(id, name));
}
} catch (Exception ex) {
System.out.println("Exception in class \"DB\" (\" public ArrayList<Worker> getWorkers()\" failed): " + ex);
}
return workers;
}
@FXML
public void addNewWorkerButton(ActionEvent event) {
String name = workerNameTextField.getText();
workerNameTextField.setText("");
db.addWorker(name);
addWorkerAnchorPane.setVisible(false);
mainAnchorPane.setOpacity(1);
mainAnchorPane.setDisable(false);
setNamesChoiceBoxes();
}
我在启动程序时从数据库中获取工作人员名称,它可以正常运行。当我向数据库添加新名称并调用“ setNamesChoiceBoxes”方法(以从数据库刷新选择框)时,它会产生很多错误,尽管新名称位于选择框列表中,但“ searchNameChoiceBox”值应为“全部”,但为“”。
添加新名称后,选择框如下所示:https://imgur.com/a/N4JarK7
应该是这样的...(因为我在方法中将值设置为“ All” ...):https://imgur.com/a/ZAEB7A3
答案 0 :(得分:0)
我想我知道您希望选择一个特定项目并显示在ChoiceBox中?
如果是这样,我建议删除此行(与其他Box类似):
//addNameChoiceBox.setValue(add.get(0));
并改用要显示的商品的真实选择。这将选择第一个项目:
addNameChoiceBox.getSelectionModel().select(0);
或者,有一种单独的方法也可以选择第一个项目:
addNameChoiceBox.getSelectionModel().selectFirst();
然后再次,您可能要选择按值显示的项目:
addNameChoiceBox.getSelectionModel().select("All"); //or whatever value you want to select.
我希望这至少可以帮助您解决部分问题。