我想将枚举值添加到TableView(Javafx)的组合框中。
我在线尝试了多个代码,但是由于字符串到枚举转换问题而试图添加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,即使它不再起作用。
这是出现错误的屏幕截图:
java - 如何在TableView Javafx中将枚举值加载到组合框-LMLPHP

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

                }

            });


现在我明白了:
java - 如何在TableView Javafx中将枚举值加载到组合框-LMLPHP

我的问题是:如何使用Edit Event在Tableview的组合框中加载Utilisateur.Etat的两个值?

最佳答案

此代码有效:

     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
     }

10-06 09:03