我是javafx的新手。我想在tableview列中添加一个组合框,它从对象的ArrayList中获取选项(项目可以根据对象而不同)。一切都很好与另一列(只有字符串值)。我试图找到解决方案,但没有任何作用。而不是显示ArrayList的组合框阵列。
下面的类代码不是真正的代码 - 为简单起见。数据将从数据库中获取。
import java.util.ArrayList;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import ru.content_analysis.data_classes.FullWorkProject;
/**
*for table of adding the texts - choosing variable vals before adding the text
* @author aryumin
*/
public class VarAndValuesForTable {
private final SimpleIntegerProperty varId;
private final SimpleStringProperty varName;
private final SimpleObjectProperty<ArrayList<String>> varValues;
public VarAndValuesForTable(int varId, String varName, ArrayList<String> varValues){
this.varId = new SimpleIntegerProperty(varId);
this.varName = new SimpleStringProperty(varName);
this.varValues = new SimpleObjectProperty(varValues);
}
public int getVarId(){
return this.varId.get();
}
public void setVarId(int varId){
this.varId.set(varId);
}
public String getVarName(){
return this.varName.get();
}
public void setVarName(String varName){
this.varName.set(varName);
}
public ArrayList<String> getVarValues(){
return this.varValues.get();
}
public void setVarValues(ArrayList<String> varValues){
this.varValues.set(varValues);
}
public static ArrayList<VarAndValuesForTable> getAllVarsNamesWithValues(FullWorkProject prj){
ArrayList<VarAndValuesForTable> allVarsWithVals = new ArrayList<VarAndValuesForTable>();
ArrayList<String> vals = new ArrayList<>();
vals.add("ff");
vals.add("kkk");
vals.add("yyy");
allVarsWithVals.add(new VarAndValuesForTable(1, "var 1", vals));
allVarsWithVals.add(new VarAndValuesForTable(2, "var 2", vals));
return allVarsWithVals;
}
}
这是控制器的一部分:
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
ArrayList<VarAndValuesForTable> projectVarWithVals = VarAndValuesForTable.getAllVarsNamesWithValues(FullWorkProject.currentLoadedProject);
allVarsValsForTable = FXCollections.observableArrayList(projectVarWithVals);
projectVarNameColumn.setCellValueFactory(new PropertyValueFactory<VarAndValuesForTable, String>("varName"));
varValuesColumn.setCellValueFactory(new PropertyValueFactory<VarAndValuesForTable, String>("varValues"));
varValuesColumn.setCellFactory(ComboBoxTableCell.forTableColumn(allVarsValsForTable));
textVarsValsTable.setItems(allVarsValsForTable);
}
答案 0 :(得分:0)
您的问题是此列属性的类型错误。 ComboBox
是编辑方法。属性的值(因此也是列)必须是基础类型。如果您想要多个String
值,则应该使用Property<String>
作为属性。
另请注意,数据模型(在您的情况下为VarAndValuesForTable
)不需要保存组合框的可能值 - 它们在ComboBoxTableCell#forTableColumn
中明确给出。如果您需要为不同的行设置不同的可能值,则必须创建自己的ComboBoxTableCell
并使用相关值填充每个值。