首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javafx TableView不显示数据

Javafx TableView不显示数据
EN

Stack Overflow用户
提问于 2018-06-04 04:37:49
回答 1查看 3K关注 0票数 0

我使用ObservableList填充TableView,但问题是数据没有显示在表中,我不知道问题出在哪里,因为行数和我添加的capture完全一样,但是单元格中什么也没有!以下是控制器的代码:

代码语言:javascript
复制
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类的代码:

代码语言:javascript
复制
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);
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 06:35:52

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

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

代码语言:javascript
复制
@FXML
TableColumn<Parameter, String> colCategory;
@FXML
TableColumn<Parameter, String> colSubCategory;
@FXML
TableColumn<Parameter, String> colSubSubCategory;

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

定义列之后,需要在initialize()方法中设置它们的CellValueFactory

代码语言:javascript
复制
colCategory.setCellValueFactory(new PropertyValueFactory<Parameter, String>("cat"));
colSubCategory.setCellValueFactory(new PropertyValueFactory<Parameter, String>("subCat"));
colSubSubCategory.setCellValueFactory(new PropertyValueFactory<Parameter, String>("subSubCat"));

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

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

colCategory.

  • The获取CellValueFactory工厂是一个PropertyValueFactory,因此确定哪个类持有该属性(在本例中是Parameter类)

  • 通过名称"cat"

  • Populate列的单元格查找Parameter类中的String属性。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50670743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档