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

时间:2017-04-24 04:05:40

标签: 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));
}

但我能看到的只是表格中的一行数据。我已经尝试打印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);
    }

1 个答案:

答案 0 :(得分:1)

首先,这不是<div *ngFor="let a of a"> <template [ngIf]="a.column=='1'"> <div *ngFor="let b of a"> <template [ngIf]="b.blockrow=='1'"> Block 1 in column 1{{b.name}} </template> </div> <div *ngFor="let b of a"> <template [ngIf]="b.blockrow=='2'"> Block 2 in column 1{{b.name}} </template> </div> <div *ngFor="let b of a"> <template [ngIf]="b.blockrow=='3'"> Block 3 in column 1{{b.name}} </template> </div> </template> </div>。该代码是如何完成的?我们如何编译和测试该代码?你没看过我的评论???

我建议您摆脱IDE并学习如何手动创建GUI。使用自定义TableModel生成JTable的IDE有什么意义。该代码完全无用,因为您随后使用创建自己的TableModel并使用setModel(...)方法替换IDE创建的模型。

MCVE

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

这不是问题,那么在发布适当的tblJobs.setPreferredSize(new java.awt.Dimension(225, 16)); 之前,我将不再有任何建议。每个问题都应该有MCVE,因此我们不会花时间猜测您可能会做什么或不做什么。