Java Swing JTable数据收集在最后一个单元格上失败



我正试图通过使用下面的方法将数据从JTable收集到数组中。

public String[][] getTableData (JTable table) {
DefaultTableModel dtm = (DefaultTableModel) table.getModel();
int nRow = dtm.getRowCount(), nCol = dtm.getColumnCount();      
String[][] tableData = new String[nRow][nCol];
for (int i = 0 ; i < nRow ; i++)
for (int j = 0 ; j < nCol ; j++)
tableData[i][j] = (String) dtm.getValueAt(i,j);
return tableData;
}

一切都很好,但我无法获得最后一行最后一列的数据。没有给出错误。当我更改循环范围时,我会得到一个arrayBound错误。

返回的方法如下:

public void setGrid(String data [][], String header []){
dtm.setRowCount(0);
dtm.setColumnCount(0);
dtm.setDataVector(data, header);
tbl1.getColumnModel().getColumn(0).setPreferredWidth(25);
}

我编辑了如下的方法来获取数据。

public String[][] getTableData (JTable table) {
String dat= new String();
DefaultTableModel dtm = (DefaultTableModel) table.getModel();
int nRow = dtm.getRowCount(), nCol = dtm.getColumnCount();
String[][] tableData = new String[nRow][nCol];
for (int i = 0 ; i < nRow ; i++)
for (int j = 0 ; j < nCol ; j++)
dat=dat + (String) dtm.getValueAt(i,j);
bb.Toplabel.setText("data is :" +dat);
//tableData[i][j] = (String) dtm.getValueAt(i,j);
return tableData;
}

即使单元格有值,显示的数据也是空的。

您做得差不多,但忘记在数组中存储dat。此外,将对象强制转换为String不会使其成为String。更好的方法是通过toString()方法获取String,或者简单地将Object作为其他运算符(如加号(+))中的String处理。这是正确和简化的代码:

public String[][] getTableData (JTable table) {
DefaultTableModel dtm = (DefaultTableModel) table.getModel();
int nRow = dtm.getRowCount(), nCol = dtm.getColumnCount();
String[][] tableData = new String[nRow][nCol];
for (int i = 0 ; i < nRow ; i++)
for (int j = 0 ; j < nCol ; j++) {
String dat=""+ dtm.getValueAt(i,j);// this will be always the String
bb.Toplabel.setText("data is :" +dat);
tableData[i][j] = dat;
}
return tableData;
}

还有一件事——在代码中始终使用大括号。即使是循环中的一行。当您向循环体添加更多的代码行时,它将帮助您避免错误。

相关内容

最新更新