java – DefaultTableModel不返回dataVector中的值

我的问题与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);
    }
}

它总是从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;
    }
}

而我正在从我的JFrame中调用

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

table.setFillsViewportHeight(true);
jScrollPane1.add(table);
jScrollPane1.setViewportView(table);

我没有得到这里的问题…..

解决方法

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

final JTable table = new JTable(tab);

以上这条线可能是错误的.你不应该使用最终变量.相反,您应该使用实例变量.所以代码应该是:

table = new JTable(tab);

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

//jScrollPane1.add(table);
jScrollPane1.setViewportView(table);

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

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...