尽管行数超过 1,但 JTable 仅显示 1 行

JTable showing only 1 row despite having more than 1 row count

我正在尝试将一些数据从数据库(我使用 Oracle 的 SQL Developer)加载到 java 中的 JTable 中。我将数据库中的数据放入一个 Vector of Vector 中,这是我放入一个名为 DBJobs:

的 class 中的加载方法
public Vector load() {
    try {
        Vector tableData = new Vector();
        Conn con = new Conn();
        con.openConn();
        con.statement = con.dbConn.createStatement();
        ResultSet rs = con.statement.executeQuery("Select * from Jobs");

        while (rs.next()) {
            Vector<Object> row = new Vector<Object>();
            row.add(rs.getString("Job_ID"));
            row.add(rs.getString("Job_Title"));
            row.add(rs.getString("Parent_Job_ID_1"));
            row.add(rs.getString("Parent_Job_ID_2"));
            row.add(rs.getString("Description"));
            tableData.add(row);
        }

        con.closeConn();
        return tableData;
    } catch (SQLException ex) {
        ex.printStackTrace();
        return null;
    }
}

然后我尝试将它们填充到 JTable 中,这是我在另一个 class:

中与编辑器一起制作的
private void populateJobsTable() {
    Vector<String> tableHeader = new Vector<String>();
    tableHeader.add("Job ID");
    tableHeader.add("Job Name");
    tableHeader.add("Parent Job ID 1");
    tableHeader.add("Parent Job ID 2");
    tableHeader.add("Description");

    Vector tableData = dbJobs.load();
    tblJobs.setModel(new DefaultTableModel(tableData, tableHeader));
}

但我只能看到 table 中的 1 行数据。我已经尝试打印 Vector 有多少数据以及 Table 有多少行,它们都返回 49,这是我数据库中的数据量。那为什么我的 table 只显示 1 个数据?

编辑: 我认为这是生成 JTable:

的代码
tblJobs = new javax.swing.JTable();
tblJobs.setFont(new java.awt.Font("Tempus Sans ITC", 0, 14)); // NOI18N
    tblJobs.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {null}
        },
        new String [] {
            "Job Name"
        }
    ) {
        Class[] types = new Class [] {
            java.lang.String.class
        };
        boolean[] canEdit = new boolean [] {
            false
        };

        public Class getColumnClass(int columnIndex) {
            return types [columnIndex];
        }

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return canEdit [columnIndex];
        }
    });
    tblJobs.setPreferredSize(new java.awt.Dimension(225, 16));
    jScrollPane5.setViewportView(tblJobs);
    if (tblJobs.getColumnModel().getColumnCount() > 0) {
        tblJobs.getColumnModel().getColumn(0).setResizable(false);
    }

首先,这不是 MCVE。该代码如何完成?我们如何编译和测试该代码?你没看我的评论吗???

我建议您去掉 IDE 并学习如何手动创建 GUI。 IDE 使用自定义 TableModel 生成 JTable 的意义何在。该代码完全没用,因为您随后使用创建自己的 TableModel 并使用 setModel(...) 方法来替换由 IDE.

创建的模型
tblJobs.setPreferredSize(new java.awt.Dimension(225, 16));

以上代码看起来很可疑。您不应该在 Swing 组件上设置首选大小。 table 的大小看起来一次只会显示一行。

这不是问题,在发布正确的 MCVE 之前,我不会有更多建议。每个问题都应该有一个 MCVE,这样我们就不会花时间猜测您可能在做什么或可能不会做什么。