我刚开始上高中并且是编程新手。我正在完成我的第一个任务,我遇到了问题。我到处都看,但没有找到任何帮助。我写了一个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 );
}
}
答案 0 :(得分:4)
setValueAt(...)
方法在模型中未设置任何值。它所做的就是点燃一个通知方法,而不是别的。答案 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