JavaFX Я не могу заполнить таблицу с помощью observableList

у меня проблема с заполнением Tableview. Когда я запускаю этот код, в моем табличном представлении такое же количество записей, как и в Observablelist, но ничего не видно.

Есть идеи? Некоторые из них не понимают, например, cellvalueProperty. Это можно использовать для моего примера? Спасибо.

 package SYSSEL;
 import java.sql.SQLException;
 import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
 import javafx.scene.control.Button;
 import javafx.stage.Stage;
 import java.sql.ResultSet;
 import javafx.scene.control.*;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;

 public class gridOfMessages extends Stage {

   private ObservableList messages;
   @FXML
   private Button buttonCloseGrid;

   @FXML
   private TableColumn C1;

   @FXML
   private TableColumn C2;

   @FXML
   private TableColumn C3;


   @FXML
   private Button buttonRefreshGrid;

   @FXML
   private TableView<gridOfMessages> gridOfMessagesList;


   @FXML
   private void HandlerCloseGrid(ActionEvent event) {

   }

   @FXML
   private void handlerRefreshGrid(ActionEvent event) throws ClassNotFoundException, SQLException {
     //Main Scene
     ResultSet rq = PdfSorting.checkNewMsgs();
     rq.first();
     messages=FXCollections.observableArrayList();
     while(rq.next()){
       //Iterate Row;
       ObservableList<String> row = FXCollections.observableArrayList();
       row.add(rq.getString("ID_DOCUMENT_ESSL"));
       row.add(rq.getString("DOCUMENT_PATH"));
       row.add(rq.getString("BAN"));
       System.out.println("Row [1] added "+row );
       messages.add(row);

     }
     gridOfMessagesList.setItems(messages);

   }
 }



<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" minWidth="307.0" prefHeight="506.999977929685" prefWidth="307.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="SYSSEL.gridOfMessages">
  <children>
    <Button id="ButtonCloseGrid" fx:id="buttonCloseGrid" layoutX="0.0" layoutY="468.0" mnemonicParsing="false" onAction="#HandlerCloseGrid" prefHeight="39.0" prefWidth="147.0" text="Zavřít" />
    <Button id="refreshGrid" fx:id="buttonRefreshGrid" layoutX="147.0" layoutY="468.0" mnemonicParsing="false" onAction="#handlerRefreshGrid" prefHeight="39.0" prefWidth="161.0" text="Aktualizovat" />
    <TableView fx:id="gridOfMessagesList" layoutX="0.0" layoutY="0.0" prefHeight="468.0" prefWidth="307.0">
      <columns>
        <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="72.0" text="Číslo datovky" fx:id="C1" />
        <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="147.0" text="Cesta" fx:id="C2" />
        <TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="87.0" text="BAN" fx:id="C3" />
      </columns>
    </TableView>
  </children>
</AnchorPane>

person Edák Edák    schedule 14.10.2014    source источник


Ответы (1)


Да, вам нужно установить фабрику значений ячеек для каждого столбца в таблице, это точно. Но вы также должны опубликовать свой код файла fxml, без него я не могу подтвердить, проблема здесь или нет.

Фабрика значений ячеек говорит, откуда берется значение. Если тип модели табличных данных — gridOfMessages, то наблюдаемый список для табличных данных должен быть того же типа.

Редактировать:

Из вашего файла fxml очевидно, что вам нужно добавить фабрику значений ячеек для каждого столбца, как в следующем примере, просто замените firstName именем свойства из вашего компонента модели данных.

  <TableColumn text="First Name">
    <cellValueFactory>
      <PropertyValueFactory property="firstName" />
    </cellValueFactory>
  </TableColumn>

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

Редактировать:

Затем вам нужно написать класс, который будет представлять одну строку таблицы. Например, если вы хотите иметь таблицу с тремя столбцами, вам нужен компонент с тремя свойствами. Затем установите это как тип для TableView и ObservableList, заполните этот список данными и установите его для таблицы, аналогично тому, как это уже есть в вашем коде. Это должно быть в классе контроллера. Это общее описание, потому что я не знаю, что должна представлять эта таблица.

Вы также можете помочь с учебником от Oracle о том, как показать данные в таблице с fxml.

person user645859    schedule 14.10.2014
comment
Я добавил код fxml. Итак, а как насчет того, когда я не использую какой-либо тип таблицы и наблюдаемый список? - person Edák Edák; 14.10.2014
comment
Хорошо, я попробую, и после этого? А я должен что-то написать в контроллер? Спасибо - person Edák Edák; 14.10.2014