2013-09-23 3 views
0

Я хотел бы загрузить TableView с данными, запрошенными из базы данных, но не могу заставить их работать правильно.Загрузка данных в TableView

При нажатии кнопки я получаю распечатку результатов в консоли Netbeans. Таблица в графическом интерфейсе изменяется с «Нет содержимого в таблице» после запуска и рисования строк, но контент не печатается в столбцах таблицы в графическом интерфейсе.

Благодарим вас заблаговременно. Это самое близкое мне время, чтобы заставить его работать. Не могли бы вы помочь мне решить эту часть? Печать элементов в столбцах в графическом интерфейсе?

FXML был выполнен через JavaFx SceneBuilder.

Это класс запросов к базе данных:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.LinkedList; 
import java.util.List; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 

public class StudentInfo { 
    static String JDBC_DRIVER = "org.h2.Driver"; 
    static String DB_URL = "jdbc:h2:file:C:/WAKILI/WAKILIdb"; 
    // Database credentials 
    static final String USER = "sa"; 
    static final String PASS = ""; 

    public static Connection conn = null; 

    public List<KIWIDataModel> getAllstudentInfo() { 
     Statement st = null; 
     ResultSet rs; 
     String driver = "org.h2.Driver"; 

     List ll = new LinkedList(); 

     try { 
      Class.forName(driver); 
      conn = DriverManager.getConnection(DB_URL, USER, PASS); 
      st = conn.createStatement(); 
      String recordQuery = ("SELECT id, KIWI FROM KIWI"); 

      rs = st.executeQuery(recordQuery); 
      while (rs.next()) { 
       int Key = rs.getInt(1); 

       ObservableList row = FXCollections.observableArrayList(); 

       for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) { 
        row.add(rs.getString(i)); 
        System.out.println(row); 
       } 

       KIWIDataModel roww = new KIWIDataModel(); 
       roww.setFirstName(Key); 

       ll.add(row); 

      } 

     } catch (ClassNotFoundException | SQLException ex) { 
      // CATCH SOMETHING 
     } 
     return ll; 
    } 
} 

Это класс контроллера:

import DB.KIWI.Try.KIWIDataModel; 
import DB.KIWI.Try.StudentInfo; 
import DBQuery.DynamicTable; 
import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 

public class SampleController implements Initializable { 

    @FXML 
    private TableView<KIWIDataModel> Table; 
    @FXML 
    private TableColumn<KIWIDataModel, Integer> colKey; 

    @FXML 
    public void selectKIWITable() { 

     System.out.println("Button Pressed"); 
     colKey.setCellValueFactory(new PropertyValueFactory<KIWIDataModel, Integer>("Key")); 

     Table.getItems().setAll(new StudentInfo().getAllstudentInfo()); 
    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
     // TODO 
    } 
} 

Это класс модели данных:

import javafx.beans.property.SimpleIntegerProperty; 

public class KIWIDataModel { 

    public SimpleIntegerProperty firstName; 

    public int getFirstName() { 
     return firstName.get(); 
    } 

    public void setFirstName(int fName) { 
     firstName.set(fName); 
    } 
} 

Это сценарий FXML сгенерированный с помощью построителя сцен JavaFx:

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

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

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="700.0" xmlns:fx="http://javafx.com/fxml" fx:controller="wakiliproject.SampleController"> 
    <children> 
    <TableView fx:id="Table" prefHeight="400.0" prefWidth="700.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
     <columns> 
     <TableColumn prefWidth="75.0" text="Column X" fx:id="colKey" /> 
     </columns> 
    </TableView> 
    </children> 
</AnchorPane> 

ответ

2

С линии

colKey.setCellValueFactory(new PropertyValueFactory<KIWIDataModel, Integer>("Key")); 

JavaFX будет искать KIWIDataModel.getKey() и KIWIDataModel.setKey (...) и необязательно KIWIDataModel.KeyProperty() методы. Так как вы не их в указанном классе, изменить его как

colKey.setCellValueFactory(new PropertyValueFactory<KIWIDataModel, Integer>("firstName")); 

EDIT: Кроме того, метод selectKIWITable() не вызывается из любой точки мира. Do

@Override 
public void initialize(URL url, ResourceBundle rb) { 
    selectKIWITable(); 
} 

и удалите @FXML с selectKIWITable() метод.

+0

Привет [Улук Бий] (http://stackoverflow.com/users/682495/uluk-biy). Я пробовал ваше предложение, но я все равно ничего не получаю! – ORey

+0

@ORey. См. Обновление. –

+0

Я не знаю, что я делаю неправильно [Улук Бий] (http://stackoverflow.com/users/682495/uluk-biy), но я не могу заставить его работать даже после всего этого. – ORey

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