java swing jtable数据收集在最后一个单元格上失败

x7yiwoj4  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(385)

我尝试使用下面的方法从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;
}

一切正常,但我不能得到最后一行最后一列的数据。未给出错误。当我改变循环范围时,我得到一个arrayoutbound错误。
返回的方法如下:

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;
}

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

iih3973s

iih3973s1#

您的操作几乎正确,但忘记在数组中存储dat。同样,将对象强制转换为字符串并不能使其成为字符串。更好的方法是通过tostring()方法获取字符串,或者在其他操作符(如plus(+))中将对象视为字符串。下面是正确的简化代码:

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;
}

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

相关问题