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

标签 java swing vector jtable oracle-sqldeveloper

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

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 中:

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

但我只能看到表中的 1 行数据。我尝试打印 Vector 有多少数据以及 Table 有多少行,它们都返回 49,这是我数据库中的数据量。那么为什么我的表格只显示 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 组件上设置首选大小。表格的大小看起来一次只能显示一行。

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

关于java - 尽管行数超过 1,但 JTable 仅显示 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43579623/

相关文章:

java - 在 JPA-/CrudRepository 中的自定义 @Query 中使用 SQL-IN 子句并将列表或设置为传递参数?

java - 考虑项目的 Portlet 架构 - 这合理吗?

java - 使添加的 JPanel 在父 JPanel 中可见

c++ - 结构与 vector 作为数据持有者

python - 如何在Python中使用h.264引用软件提取运动向量

java - 如何在 android studio 中找到数组中项目的编号?

java - 获取特定的 JFrame 组件以更改其值

java - NetBeans 平台 : Toolbar and Actions

java - Java 中声明式 GUI 编程的建议

c++ - C++中std::map的运行时复杂度是多少?