可编辑的组合框

时间:2014-05-01 17:34:46

标签: user-interface combobox javafx

我有一个包含员工ObservableList的单例EmployeeDatabase。

此ObsList填充可编辑组合框的内容。

当用户从组合框中选择一个员工并点击按钮时,我希望该员工(来自数据库)显示在控制台的toString()中。

问题是,可编辑的组合框不允许我直接选择员工。我应该使用StringConverter将该String转换为Employee。

但是员工已经存在于单例数据库中!我是否必须在数据库中搜索它们?或者是否有一种更简单的方法来使Employee好像组合框不可编辑,而我所要做的就是cmbx.getSelectionModel()。getSelectedItem()?

1 个答案:

答案 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);