Я хотел бы загрузить 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>
Привет [Улук Бий] (http://stackoverflow.com/users/682495/uluk-biy). Я пробовал ваше предложение, но я все равно ничего не получаю! – ORey
@ORey. См. Обновление. –
Я не знаю, что я делаю неправильно [Улук Бий] (http://stackoverflow.com/users/682495/uluk-biy), но я не могу заставить его работать даже после всего этого. – ORey