Javafx TableView не показывает данные - PullRequest
0 голосов
/ 03 июня 2018

Я использовал ObservableList для заполнения TableView, но проблема в том, что данные не отображаются в таблице. Я не знаю, в чем проблема, потому что количество строк точно такое же, как я их добавил захват но в клетках ничего нет!вот код контроллера:

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

}

1 Ответ

0 голосов
/ 04 июня 2018

Вы должны указать TableView КАК отображать данные.Это делается с помощью CellValueFactory.По сути, вам нужно указать каждому столбцу таблицы, какой тип данных он содержит и откуда он получает эти данные.

Вам необходимо начать с определения столбцов (задайте им fx:id либо в FXMLфайл или в SceneBuilder):

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

Каждый TableColumn принимает два параметра типа.Первый определяет отображаемый объект (Parameter).Второй тип данных для этого столбца (все ваши String).

После того, как столбцы определены, вам нужно установить их CellValueFactory в вашем методе initialize():

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. Получите CellValueFactory для colCategory.
  2. Фабрика - PropertyValueFactory, поэтому определите, какой класс содержит свойство (в данном случаеэто класс Parameter)
  3. Найдите в классе Parameter свойство String по имени "cat"
  4. Заполните ячейку столбца значением cat собственность.
...