【问题标题】:Can't add combobox to TabelView JavaFx无法将组合框添加到表视图 JavaFx
【发布时间】:2016-05-11 19:24:33
【问题描述】:

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

}  

【问题讨论】:

  • 欢迎来到 StackOverflow。虽然我可以找出问题出在哪里,但如果您能提供给我们Minimal, Complete, and Verifiable example,那就太好了。这使人们更容易调试并为您的问题提供解决方案。

标签: javafx combobox tableview


【解决方案1】:

您的问题是此列属性的类型错误。 ComboBox 是编辑方法。属性(以及列)的值必须是基础类型。如果你想要多个 String 值,你应该有一个 Property&lt;String&gt; 作为属性。

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

【讨论】:

  • 谢谢你。您能否建议一些链接来理解这个决定?对我来说还是很困难
猜你喜欢
  • 2018-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 2016-01-12
相关资源
最近更新 更多