我有一个包含员工ObservableList的单例EmployeeDatabase。
此ObsList填充可编辑组合框的内容。
当用户从组合框中选择一个员工并点击按钮时,我希望该员工(来自数据库)显示在控制台的toString()中。
问题是,可编辑的组合框不允许我直接选择员工。我应该使用StringConverter将该String转换为Employee。
但是员工已经存在于单例数据库中!我是否必须在数据库中搜索它们?或者是否有一种更简单的方法来使Employee好像组合框不可编辑,而我所要做的就是cmbx.getSelectionModel()。getSelectedItem()?
答案 0 :(得分:1)
您不需要返回数据库,因为您已经拥有ObservableList
,其中包含Employee
个。您应该可以执行以下操作:
final ComboBox<Employee> employeeCombo = new ComboBox<>();
employeeCombo.setItems(EmployeeDatabase.getInstance().getEmployees());
employeeCombo.setConverter(new StringConverter<Employee>() {
@Override
public Employee fromString(String string) {
for (Employee employee : employeeCombo.getItems()) {
if (string.equals(employee.getName())) { // may need more logic...
return employee ;
}
}
Employee employee = new Employee(string);
// if things are set up correctly, this call should both update the database
// and the observable list to which the combo box points
EmployeeDatabase.getInstance().add(employee);
return employee ;
}
@Override
public String toString(Employee employee) {
return employee == null : null ? employee.getName();
}
});
employeeCombo.setEditable(true);