如何在TableView Javafx中将枚举值加载到Combobox

时间:2016-02-13 22:26:22

标签: java javafx combobox javafx-2 javafx-8

我想将一个枚举值添加到Combobox到TableView(Javafx)。 我在线尝试了多个代码,但是当尝试添加由于字符串到Enum转换问题的Edit事件时,唯一有效的代码停止工作。 这是我的代码:

    this.tv_ListUsers_cl_Etat.setCellValueFactory(new PropertyValueFactory<>("etat"));
    this.tv_ListUsers_cl_Etat.setCellFactory(TextFieldTableCell.<Utilisateur, Utilisateur.Etat>forTableColumn());
    tv_ListUsers_cl_Etat.setOnEditCommit(
            (CellEditEvent<Utilisateur, Utilisateur.Etat> t) -> {

                if (t.getNewValue().equals("actif")) {
                    ((Utilisateur) t.getTableView().getItems().get(
                            t.getTablePosition().getRow())).setEtat(User.Etat.Actif);
                } else {
                    ((Utilisateur) t.getTableView().getItems().get(
                            t.getTablePosition().getRow())).setEtat(User.Etat.Bloque);

                }

            });

其中tv_ListUsers_cl_Etat是我要放置Etat值的列:

    private TableColumn<Utilisateur, Utilisateur.Etat> tv_ListUsers_cl_Etat;

Utilisateur.Etat:

    public enum Etat {
      Actif,Bloque}

PS:这段代码适用于TextField而不是Combobox,即使这样也不行。 这是出现错误的屏幕截图: enter image description here

PS:我修改了我的代码:

    this.tv_ListUsers_cl_Etat.setCellValueFactory(new PropertyValueFactory<>("etat"));
    Utilisateur User = new Utilisateur();
    this.tv_ListUsers_cl_Etat.setCellFactory(ComboBoxTableCell.<Utilisateur,Utilisateur.Etat>forTableColumn(User.getEtat()));
    tv_ListUsers_cl_Etat.setOnEditCommit(
            (CellEditEvent<Utilisateur, Utilisateur.Etat> t) -> {

                if (t.getNewValue().equals(User.Etat.Actif)) {
                    ((Utilisateur) t.getTableView().getItems().get(
                            t.getTablePosition().getRow())).setEtat(User.Etat.Actif);
                } else {
                    ((Utilisateur) t.getTableView().getItems().get(
                            t.getTablePosition().getRow())).setEtat(User.Etat.Bloque);

                }

            });

现在我明白了: enter image description here

我的问题是:如何使用编辑事件在Tableview中的Combobox中加载Utilisateur.Etat的两个值?

1 个答案:

答案 0 :(得分:1)

此代码有效:

     Etat etat = Etat.Actif ;

    this.tv_ListUsers_cl_Etat.setCellFactory(ComboBoxTableCell.<Utilisateur,Etat>forTableColumn(etat.values()));
    tv_ListUsers_cl_Etat.setOnEditCommit(
        (CellEditEvent<Utilisateur, Etat> t) -> {

            if (t.getNewValue().equals(Etat.Actif)) {
                ((Utilisateur) t.getTableView().getItems().get(
                        t.getTablePosition().getRow())).setEtat(Etat.Actif);
            } else {
                ((Utilisateur) t.getTableView().getItems().get(
                        t.getTablePosition().getRow())).setEtat(Etat.Bloque);

            }

        });

我添加了包含此内容的Etat.java:

    public enum Etat {

Actif,Bloque
     }