微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐