2014-10-14 3 views
1

У меня проблема с заполнением Tableview. Когда я запускаю этот код, у моего табличного представления есть такое же количество записей, как Observablelist, но ничего не видно.JavaFX Я не могу заполнить tableview by 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> 

ответ

0

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

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

Edit:

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

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

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

Edit:

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

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

+0

Я добавил код fxml. Итак, а как насчет того, когда я не использую список табличных наблюдений? –

+0

Хорошо, я попробую, и после этого? A Я должен написать некоторые контроллеру? Спасибо –

Смежные вопросы