java - 将数据加载到TableView

标签 java mysql javafx tableview

我想加载一个带有从数据库查询的数据的 TableView,但似乎无法让它正常工作。

单击该按钮后,我会在 Netbeans 控制台中打印结果。 GUI 中的表格在运行后从“表格中没有内容” 更改,并绘制行,但 GUI 中的表格列中没有打印任何内容。

提前谢谢大家。这是我几天来最接近让它发挥作用的一次。你能帮我解决这另一部分吗?将项目打印到 GUI 的列中?

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;
    }
}

这是 Controller 类:

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);
    }
}

这是通过 JavaFx 场景生成器生成的 FXML 脚本:

<?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>

最佳答案

用线

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

JavaFX 将查找 KIWIDataModel.getKey() 和 KIWIDataModel.setKey(...) 以及可选的 KIWIDataModel.KeyProperty() 方法。由于您在提到的类(class)中没有它们,因此将其更改为

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

编辑:此外, selectKIWITable() 方法不会从任何地方调用。做

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

并从selectKIWITable()方法中删除@FXML。

关于java - 将数据加载到TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18959544/

相关文章:

Java Process 无法通过标准 IO 重定向读取 Factorio 的输出

mysql - 从停靠站表定义路线

php - 使用php和mysql记录curl GET请求的结果

java - JavaFX 中的样式按下按钮

JavaFX8如何将 "press"状态传递给子进程?

java - 从build.gradle从Java类访问变量

java - 将包导入到同一个maven项目的其他模块中

java - 如何检索按 ID 分组的所有实体?

php - 在sql查询中创建计数器

javafx - 如何使用 javaFX 拥有多个 SplitPanes(包括子项)?