JTable单元格未更新

时间:2013-03-30 16:24:48

标签: java swing jtable abstracttablemodel

我刚开始上高中并且是编程新手。我正在完成我的第一个任务,我遇到了问题。我到处都看,但没有找到任何帮助。我写了一个gui,它接受JTable中的输入和输出数据。一切都很好,只是当我输入新输入时表不会更新,即先前显示的日期不会更改为新值。我怀疑下面显示的AbstractTableModel的实现是导致故障的原因,因为我不知道如何覆盖方法isCellEditable和setValueAt。有人请进行必要的更正,并给我任何额外的信息,以帮助我完成我的项目?如果你能尽快回复我,我将深表感激。

PS。 nh和vh是整数数组,proc_1和proc_是字​​符串数组,如果重要的话,表被添加到jtabbedpane中......

public class TableModel extends AbstractTableModel  {
    int numRows;
    String colNames[] = { "NH", "Horse Names", "VH",
                          "Proc. I", "Proc. II" };
    TableModel()  {
        super();
        numRows = fnh;
    }   

    @Override
    public int getRowCount()  {
       return numRows;
    }

    @Override
    public int getColumnCount()  {
        return 5;
    }

    @Override
    public String getColumnName( int c ) {
        return colNames[c];
    }

    @Override
    public Object getValueAt( int r, int c )  {
        if ( c == 0 ) 
            return nh[r];
        else if ( c == 1 )
            return hNam[r];
        else if ( c == 2 )
            return vh[r] ;
        else if ( c == 3 )
            return proc_1[r];
        else 
            return proc_2[r];    
    }   

    @Override
    public boolean isCellEditable( int r, int c )  {
        return true;
    }

    @Override
    public void setValueAt( Object v, int r, int c )  {
        fireTableCellUpdated( r, c );
    }
}

2 个答案:

答案 0 :(得分:4)

  • 您的setValueAt(...)方法在模型中未设置任何值。它所做的就是点燃一个通知方法,而不是别的。
  • 此外,您的模型基本上没用,因为它没有数据“核心”,没有什么可以保存它应该保留的数据。通常这是一个集合,例如ArrayList。
  • 我认为你需要重新阅读JTable教程。

答案 1 :(得分:2)

此处setValueAt应该是

public void setValueAt( Object v, int r, int c )  {
    if ( c == 0 ) 
        nh[r] = (Integer)v;
    else if ( c == 1 )
        hNam[r] = (String)v;
    else if ( c == 2 )
        vh[r] = (Integer)v;
    else if ( c == 3 )
        proc_1[r] =(String)v;
    else 
        proc_2[r] =(String) v;
    fireTableCellUpdated( r, c );
}

项目完成后。阅读以在oracle官方网站上完成JTable的教程。在那里,您将获得如何以正确方式使用JTable的完整图片。以下是教程链接:How to use JTable