[英]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。
您想要做的是:
Vector
而不是ArrayList DefaultTableModel
。 阅读适用于相应构造函数的API。 然后,在要遍历ResultSet的逻辑中,您要:
Vector
addRow(...)
方法。 该模型还将接受一个Vector,因此无需将其转换为数组 将所有数据添加到模型后,您需要:
tableModelView.setModel(...)
替换表中的模型。 现在,您的表模型将同时具有数据的列和行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.