gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:28:46 24 4
gpt4 key购买 nike

我在 swing 中使用 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());
}

}

ScreenShot

除此之外,我还删除了在表单中插入 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(...) 替换表格中的模型。

现在您的表格模型将同时包含数据列和行。

关于java - tableModel.addRow() 未在 JTable 中显示任何内容,但行对象具有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com