【问题标题】:Javafx TableView not showing dataJavafx TableView不显示数据
【发布时间】:2018-11-13 04:59:57
【问题描述】:

我使用ObservableList 填充TableView 但问题是数据未显示在表中我不知道是什么问题,因为行数与我添加它们的行数完全相同capture但是细胞里什么都没有! 这是控制器的代码:

public class EnlistDim {

    private static final String DEFAULT="-fx-text-background-color: black; -fx-background-color: steelblue;-fx-fill: red ;";
    @FXML
    private TableView<Parameter> tab;


    @FXML
    public void initialize() {
        final ObservableList<Parameter> data = FXCollections.observableArrayList(
        new Parameter("Query","Access method","Sequential scan"),
                new Parameter("Query","Access method","in memory"),
        new Parameter("Query","Operation","join"),
        new Parameter("Query","Operation","Scan"),
        new Parameter("Query","Operation","Sort"),
        new Parameter("Database","Buffer management","Without buffer"),
        new Parameter("Database","Buffer management","FIFO"),
        new Parameter("Database","Buffer management","LIFO"),
        new Parameter("Database","Buffer management","LRU"),
        new Parameter("Database","Buffer management","Other"),

        new Parameter("Database","Optimization structure","Not used"),
        new Parameter("Database","Optimization structure","Partionning"),
        new Parameter("Database","Optimization structure","Materialized View"),
        new Parameter("Database","Optimization structure","compresssion"),

        new Parameter("Database","System storage type","Database SQL"),
        new Parameter("Database","System storage type","New SQL"),
        new Parameter("Database","System storage type","Document"),
        new Parameter("Database","System storage type","Graph"),
        new Parameter("Database","System storage type","NVRAM"),
        new Parameter("Database","System storage type","key value store"),

        new Parameter("Database","Data storage type","Row Oriented"),
        new Parameter("Database","Data storage type","Column Oriented"),
        new Parameter("Database","Data storage type","Hybrid Oriented"),

        new Parameter("Hardware","Processing device","CPU"),
        new Parameter("Hardware","Processing device","GPU"),
        new Parameter("Hardware","Processing device","FPGA"),


        new Parameter("Hardware","Storage device","RAM"),
        new Parameter("Hardware","Storage device","SSD"),
        new Parameter("Hardware","Storage device","NVRAM"),


        new Parameter("Hardware","Communication device","Modem"),
        new Parameter("Hardware","Communication device","Cable"),
        new Parameter("Hardware","Communication device","FaxModem"),
        new Parameter("Hardware","Communication device","Router")

           );
        tab.setEditable(true);
        tab.setItems(data);



        tab.setStyle(DEFAULT);

    }

}

以及Parameter类的代码:

class  Parameter {

   SimpleStringProperty cat;
   SimpleStringProperty subCat;
   SimpleStringProperty subSubCat;

        Parameter(String cat, String subCat, String subSubCat) {
        this.cat = new SimpleStringProperty(cat);
        this.subCat = new SimpleStringProperty(subCat);
        this.subSubCat = new SimpleStringProperty(subSubCat);
    }

    public String getCat() {
        return cat.get();
    }
    public void setCat(String c) {
        cat.set(c);
    }

    public String getSubCat() {
        return subCat.get();
    }
    public void setSubCat(String sc) {
        subCat.set(sc);
    }

    public String getSubSubCat() {
        return subSubCat.get();
    }
    public void setSubSubCat(String ssc) {
        subSubCat.set(ssc);
    }

}

【问题讨论】:

  • 你在哪里设置cellValueFactorys?
  • 感谢您的回复,我不知道它是什么,我应该添加它以使代码正常工作吗?

标签: javafx tableview


【解决方案1】:

您需要实际告诉TableView 如何显示数据。这是使用CellValueFactory 完成的。基本上,您需要告诉表的每一列它包含什么类型的数据以及从哪里获取这些数据。

您需要从定义列开始(在 FXML 文件或 SceneBuilder 中给它们一个 fx:id):

@FXML
TableColumn<Parameter, String> colCategory;
@FXML
TableColumn<Parameter, String> colSubCategory;
@FXML
TableColumn<Parameter, String> colSubSubCategory;

每个TableColumn 接受两个类型参数。第一个定义正在显示的对象 (Parameter)。第二个是该列的数据类型(你的都是String)。

一旦定义了列,您需要在您的initialize() 方法中设置它们的CellValueFactory

colCategory.setCellValueFactory(new PropertyValueFactory<Parameter, String>("cat"));
colSubCategory.setCellValueFactory(new PropertyValueFactory<Parameter, String>("subCat"));
colSubSubCategory.setCellValueFactory(new PropertyValueFactory<Parameter, String>("subSubCat"));

在这里,您要告诉每一列在哪里可以找到要显示的数据。引号中的最后一个参数是Parameter 对象中您的属性的名称。

因此,当 JavaFX 填充您的表时,它将采取以下步骤来填充每一列(例如,colCategory):

  1. colCategory 获取CellValueFactory
  2. 工厂是PropertyValueFactory,因此确定哪个类拥有该属性(在本例中为Parameter 类)
  3. Parameter 类中查找名为“cat”的 String 属性
  4. 使用cat 属性的值填充列的单元格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2016-11-18
    • 2015-12-24
    • 2016-09-02
    • 2014-07-28
    • 2015-12-15
    • 1970-01-01
    相关资源
    最近更新 更多