DefaultTableModel 不返回 dataVector 中的值

Ank*_*tel 3 java swing jtable defaulttablemodel

JTable我的问题与和相关DefaultTableModel。我的任务是创建JTable一个显示带有复选框的数据...我成功地完成了..但是我想删除由JTable复选框选择的行...我知道这已经被问了太多次...而且我需要使用removeRow(int row)方法用于删除...但是当我执行该语句时

DefaultTableModel model=(DefaultTableModel)jTable1.getModel();
int totalrows=model.getRowCount();
for (int i = totalrows - 1 ; i >= 0; i--)
{
    Boolean checked = (Boolean) jTable1.getModel().getValueAt(i, 8);

    if (checked) 
    {
        ((DefaultTableModel)jTable1.getModel()).removeRow(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

它总是从getRowCount()方法返回 0,因此它不会进入循环。表已经有行。

我的TableModel班级如下

public class tabmod extends DefaultTableModel
{
    public tabmod(Object rowData[][], Object columnNames[]) {
        super(rowData, columnNames);
    }

    @Override
    public Class getColumnClass(int col) {
        if (col == 8)
            return Boolean.class;
        return super.getColumnClass(col); //other columns accept String values
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        return col == 8;
    }
}
Run Code Online (Sandbox Code Playgroud)

JFrame我是这样称呼它的

tabmod tab=new tabmod(t,header);
final JTable table = new JTable(tab);

table.setFillsViewportHeight(true);
jScrollPane1.add(table);
jScrollPane1.setViewportView(table); 
Run Code Online (Sandbox Code Playgroud)

我不明白这里有什么问题......

cam*_*ckr 5

如果您说行数为零,但表在可见 GUI 上显示了行,则意味着您的代码未引用可见表,这意味着您可能为表创建了实例变量和局部变量。

final JTable table = new JTable(tab);
Run Code Online (Sandbox Code Playgroud)

上面的行可能是错误的。您不应该使用最终变量。相反,您应该使用实例变量。所以代码应该是:

table = new JTable(tab);
Run Code Online (Sandbox Code Playgroud)

现在您的deleteRows() 方法可以引用实例变量。

//jScrollPane1.add(table);
jScrollPane1.setViewportView(table); 
Run Code Online (Sandbox Code Playgroud)

您永远不应该将组件添加到滚动窗格。您只添加第二行正确执行的组件。摆脱第一行。