我有一个单例employeeddatabase,它包含一个可观察的雇员列表。
这个ObsList填充一个可编辑的组合框的内容。
当用户从组合框中选择一个雇员并点击按钮时,我希望该雇员(来自数据库)显示在控制台的toString()中。
问题是,可编辑的组合框不允许我直接选择员工。我应该使用StringConverter将该String转换为Employee。
但是Employee已经存在于单例数据库中!我必须在数据库中搜索它们吗?或者是否有一种更简单的方法来获取Employee,就像组合框不可编辑一样,我所要做的就是cmbx.getSelectionModel().getSelectedItem()?
您不需要返回到数据库,因为您已经有一个包含在那里的Employee
的ObservableList
。您应该能够执行如下操作:
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);