我想将枚举值添加到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,即使它不再起作用。
这是出现错误的屏幕截图:
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);
}
});
现在我明白了:
我的问题是:如何使用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
}