2016-02-13 77 views
0

我想将一个枚举值添加到组合框到一个TableView(Javafx)。 我在网上尝试了多个代码,但只有一个工作时试图添加一个编辑事件,由于字符串到Enum转换问题停止工作。 这是我的代码:如何将枚举值加载到TableView中的Combobox Javafx

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就是我想要把行政法院的值的列:

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

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

回答

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 
    }