繁体   English   中英

tableModel.addRow()在JTable中未显示任何内容,但行对象具有值

[英]tableModel.addRow() not showing anything in JTable but row object has values

我正在使用JTable来显示MySQL表,尽管表值存在于行对象中(如屏幕截图中的输出所示),但应用程序中的jtable为空。 屏幕快照中的输出显示了Object []数组,但是当我在addRow方法中传递该数组时,它在JTable GUI上未显示任何内容。

private void tableSubmitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                  

    //fetch the name of the database to be created
    String dbName = tableDBName.getText();
    //fetch the root password 
    String password = new String(tableDBPass.getPassword());
    // fetch table name
    String tableName = tableTableName.getText();        

    DefaultTableModel tableModel = (DefaultTableModel)tableViewTable.getModel();
    int rowCount = tableModel.getRowCount();
    for(int i = 0; i<rowCount; i++){
        tableModel.removeRow(0);
    }

    try{
        // create connection
        CreateConnection newCon = new CreateConnection();
        Statement newStat = newCon.initiate(dbName, password);

        // result set contains the data fetched from the MySQL table
        ResultSet rs = newStat.executeQuery("select * from "+tableName);

        // get column names and column count
        ResultSetMetaData metaData = rs.getMetaData();
        int n_columns = metaData.getColumnCount();

        ArrayList<String> columnNames = new ArrayList<>();


        for(int i = 1; i<=n_columns; i++){
            columnNames.add(metaData.getColumnName(i));
        }


        while(rs.next()){
            ArrayList row = new ArrayList(n_columns);

            for(int i = 1; i<=n_columns; i++){
                row.add(rs.getObject(i));
            }
            Object[] obj = row.toArray();
            tableModel.addRow(obj);
            System.out.println("table updated..: "+Arrays.toString(obj));
        }
    }catch(SQLException e){
        System.out.println(e.getMessage());
    }

}

屏幕截图

除此之外,我删除了在表单中插入JTable时最初出现的所有行。

DefaultTableModel tableModel = (DefaultTableModel)tableViewTable.getModel();

因此,您从一个空的TableModel开始,这意味着该模型没有列或行。

因此,即使您调用addRow()方法,您的模型也没有列,因此JTable中没有任何内容可显示

ArrayList<String> columnNames = new ArrayList<>();

for(int i = 1; i<=n_columns; i++){
     columnNames.add(metaData.getColumnName(i));
 }

上面的代码什么都不做。 它所做的只是向ArrayList中添加一些数据,但是从未使用过ArrayList。

您想要做的是:

  1. 使用Vector而不是ArrayList
  2. 然后,您需要仅使用列名称创建一个空的DefaultTableModel 阅读适用于相应构造函数的API。

然后,在要遍历ResultSet的逻辑中,您要:

  1. 再次对每行数据使用一个Vector
  2. 将数据添加到Vector
  3. 调用模型的addRow(...)方法。 该模型还将接受一个Vector,因此无需将其转换为数组

将所有数据添加到模型后,您需要:

  1. 使用tableModelView.setModel(...)替换表中的模型。

现在,您的表模型将同时具有数据的列和行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM