JavaFx可编辑组合框:在项目选择上显示toString

什里雅斯·戴夫(Shreyas Dave)

我有一个ComboBox<Perosn>type Person,其中添加了一些Personclass对象

我已使用setCellFactory(Callback)方法在组合框下拉列表中显示人名

combobox.setCellFactory(
    new Callback<ListView<Person >, ListCell<Person >>() {
        @Override
        public ListCell<Person > call(ListView<Person > p) {
            ListCell cell = new ListCell<Person >() {
                @Override
                protected void updateItem(Person item, boolean empty) {
                    super.updateItem(item, empty);
                    if (empty) {
                        setText("");
                    } else {
                        setText(item.getName());
                    }
                }
            };
            return cell;
        }
    });

并且,在选择时setButtonCell(ListCell)显示名称的方法combobox

combobox.setButtonCell(
    new ListCell<Object>() {
        @Override
        protected void updateItem(Person t, boolean bln) {
            super.updateItem(t, bln); 
            if (bln) {
                setText("");
            } else {
                setText(t.getName());
            }
        }
    });

在正常情况下,这可以很好地工作,但是当我使用可编辑的组合框时,它将失败。

当我写时,combobox.setEditable(true);然后在项目选择上,组合框的文本字段(编辑器)显示toString()人员类别的方法。

正常情况: 正常情况

可编辑的案例: 可编辑案例

有什么解决办法吗?

我有一个模特班

public class Person {
    String name;
    int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" + "name=" + name + ", age=" + age + '}';
    }
}
什里雅斯·戴夫(Shreyas Dave)

这是我自己的问题的答案,经过多次努力和更正,我找到了最好的答案。

mainComboBox.setButtonCell(
    new ListCell<Object>() {
        @Override
        protected void updateItem(Object t, boolean bln) {
            super.updateItem(t, bln);
            if (bln) {
                setText("");
            } else {
                setText(getStringField(t));
            }
        }
    });

mainComboBox.setConverter(
    new StringConverter() {
        private Map<String, Object> map = new HashMap<>();

        @Override
        public String toString(Object t) {
            if (t != null) {
                String str = getStringField(t);
                map.put(str, t);
                return str;
            } else {
                return "";
            }
        }

        @Override
        public Object fromString(String string) {
            if (validate && !map.containsKey(string)) {
                mainComboBox.setValue(null);
                mainComboBox.getEditor().clear();
                return null;
            }
            return map.get(string);
        }
    });

mainComboBox.setCellFactory(
    new Callback<ListView<Object>, ListCell<Object>>() {
        @Override
        public ListCell<Object> call(ListView<Object> p) {
            ListCell cell = new ListCell<Object>() {
                @Override
                protected void updateItem(Object item, boolean empty) {
                    super.updateItem(item, empty);
                    if (empty) {
                        setText("");
                    } else {
                        setText(getStringField(item));
                    }
                }
            };return cell;
        }
    });

并与所需的功能getStringField(Object)

public String getStringField(Object o) {
    return ((Pesron) o).getName();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单击选择JavaFX可编辑组合框文本

来自分类Dev

选择特定的组合框项目后,如何将DataGridViewComboBoxCell设置为可编辑模式?

来自分类Dev

JAVAFX可编辑组合框:更改值后刷新

来自分类Dev

JavaFX 11可编辑组合框抛出IndexOutOfBoundsException

来自分类Dev

JAVAFX可编辑组合框:更改值后刷新

来自分类Dev

JavaFX组合框样式按钮(如果可编辑)

来自分类Dev

WPF退出“已删除”组合框,项目不再可编辑?

来自分类Dev

如何使不可编辑的组合框显示提示符?

来自分类Dev

如何在表单上制作可编辑的组合框

来自分类Dev

保持方向选择上的项目选择

来自分类Dev

保持方向选择上的项目选择

来自分类Dev

具有可编辑组合框的WPF可编辑Listview

来自分类Dev

可编辑组合框打开选择文件对话框

来自分类Dev

qt组合框可读但可编辑

来自分类Dev

JavaFX 8-如何通过CSS更改不可编辑组合框的提示文本的颜色?

来自分类Dev

如何在JavaFx的可编辑组合框中获取输入值?

来自分类Dev

如何转换为可编辑的选择框?

来自分类Dev

如何设置x可编辑的选择框

来自分类Dev

JavaFX ListView CellFactory禁用项目选择

来自分类Dev

JavaFX ListView CellFactory禁用项目选择

来自分类Dev

从组合框中选择项目时显示 MessageBox

来自分类Dev

捕获UITaBbarViewController项目选择以决定显示它

来自分类Dev

具有自定义对象的可编辑组合框可重写下拉列表中的项目

来自分类Dev

取消选择组合框项目

来自分类Dev

取消选择组合框项目

来自分类Dev

在Eclipse上运行配置中的项目选择为空

来自分类Dev

在Eclipse上的运行配置中的项目选择为空

来自分类Dev

Extjs不可编辑的组合框自动完成

来自分类Dev

如何允许用户清除可编辑组合框的值?

Related 相关文章

  1. 1

    单击选择JavaFX可编辑组合框文本

  2. 2

    选择特定的组合框项目后,如何将DataGridViewComboBoxCell设置为可编辑模式?

  3. 3

    JAVAFX可编辑组合框:更改值后刷新

  4. 4

    JavaFX 11可编辑组合框抛出IndexOutOfBoundsException

  5. 5

    JAVAFX可编辑组合框:更改值后刷新

  6. 6

    JavaFX组合框样式按钮(如果可编辑)

  7. 7

    WPF退出“已删除”组合框,项目不再可编辑?

  8. 8

    如何使不可编辑的组合框显示提示符?

  9. 9

    如何在表单上制作可编辑的组合框

  10. 10

    保持方向选择上的项目选择

  11. 11

    保持方向选择上的项目选择

  12. 12

    具有可编辑组合框的WPF可编辑Listview

  13. 13

    可编辑组合框打开选择文件对话框

  14. 14

    qt组合框可读但可编辑

  15. 15

    JavaFX 8-如何通过CSS更改不可编辑组合框的提示文本的颜色?

  16. 16

    如何在JavaFx的可编辑组合框中获取输入值?

  17. 17

    如何转换为可编辑的选择框?

  18. 18

    如何设置x可编辑的选择框

  19. 19

    JavaFX ListView CellFactory禁用项目选择

  20. 20

    JavaFX ListView CellFactory禁用项目选择

  21. 21

    从组合框中选择项目时显示 MessageBox

  22. 22

    捕获UITaBbarViewController项目选择以决定显示它

  23. 23

    具有自定义对象的可编辑组合框可重写下拉列表中的项目

  24. 24

    取消选择组合框项目

  25. 25

    取消选择组合框项目

  26. 26

    在Eclipse上运行配置中的项目选择为空

  27. 27

    在Eclipse上的运行配置中的项目选择为空

  28. 28

    Extjs不可编辑的组合框自动完成

  29. 29

    如何允许用户清除可编辑组合框的值?

热门标签

归档