-1

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

附言。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 );
    }
}
4

2 回答 2

4
  • 您的setValueAt(...)方法在模型中没有设置任何值。它所做的只是触发通知方法,仅此而已。
  • 此外,您的模型本质上是无用的,因为它没有数据“核心”,没有任何东西可以保存它应该保存的数据。通常这是一个集合,例如 ArrayList。
  • 我认为您需要重新阅读 JTable 教程。
于 2013-03-30T16:27:40.193 回答
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 );
}

在您的项目完成后。JTable在 oracle 官方网站上阅读以完成教程。在那里,您将全面了解如何以JTable正确的方式使用。这是教程链接:How to use JTable

于 2013-03-30T16:30:28.877 回答