2014-10-14 3 views
1

Tableview를 채우는 데 문제가 있습니다. 이 코드를 실행하면 내 tableview Observablelist 같은 레코드 수가 있지만 아무것도 볼 수 있습니다.JavaFX observableList로 tableview를 채울 수 없습니다.

아이디어가 있으십니까? 일부는 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 인 경우 테이블 데이터의 관찰 가능 목록은 동일한 유형이어야합니다.

편집 : 당신의 fxml 파일에서

는 모든 열의 셀 값 공장을 추가 할 필요가 분명하다, 다음 예에서와 같은, 당신의 데이터 모델 빈에서 속성 이름과 firstName을 교체합니다.

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

TableView 및 ObservableList에 대한 데이터 형식을 설정하지 않으면 기본 개체 유형으로 간주됩니다. 어쨌든, 테이블에있는 하나 이상의 열은 이런 식으로 만들기가 어렵습니다.

편집 :

그런 다음 하나의 테이블 행을 나타내는 클래스를 작성해야합니다. 예를 들어, 세 개의 컬럼으로 된 테이블을 원한다면 세 개의 프로퍼티를 가진 빈이 필요하다. 그런 다음 이것을 TableView 및 ObservableList의 유형으로 설정하고, 해당 목록에 데이터를 채우고, 코드에 이미있는 것처럼 테이블에 설정하십시오. 컨트롤러 클래스에 있어야합니다. 이 테이블이 무엇을 나타내야하는지 모르기 때문에 이것은 일반적인 설명입니다.

또한 fxml을 사용하여 테이블에 데이터를 표시하는 방법에 대한 오라클의 tutorial 도울 수 있습니다.

+0

fxml 코드를 추가했습니다. 그럼, tableview ane observable list 형식을 사용하지 않는 것은 어떻습니까? –

+0

나는 그것을 시도하고, 이것 후에? 컨트롤러에 몇 가지를 써야합니까? 감사합니다. –

관련 문제