无法将组合框添加到TabelView JavaFx

时间:2016-02-02 20:04:30

标签: javafx combobox tableview

我是javafx的新手。我想在tableview列中添加一个组合框,它从对象的ArrayList中获取选项(项目可以根据对象而不同)。一切都很好与另一列(只有字符串值)。我试图找到解决方案,但没有任何作用。而不是显示ArrayList的组合框阵列。 enter image description here

下面的类代码不是真正的代码 - 为简单起见。数据将从数据库中获取。

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

}  

1 个答案:

答案 0 :(得分:0)

您的问题是此列属性的类型错误。 ComboBox是编辑方法。属性的值(因此也是列)必须是基础类型。如果您想要多个String值,则应该使用Property<String>作为属性。

另请注意,数据模型(在您的情况下为VarAndValuesForTable)不需要保存组合框的可能值 - 它们在ComboBoxTableCell#forTableColumn中明确给出。如果您需要为不同的行设置不同的可能值,则必须创建自己的ComboBoxTableCell并使用相关值填充每个值。