Java Jtable未使用我的abstracttablemodel更新

Java Jtable未使用我的abstracttablemodel更新,java,swing,jtable,abstracttablemodel,Java,Swing,Jtable,Abstracttablemodel,我是编程新手,正在做我的第一份学校作业。我已经编写了一个gui,它接受添加到jpaddedpane的jtable中的输入和输出数据。当表格第一次出现时,它会显示所有正确的数据。但当我输入新的输入时,表不会更新。我也不能肯定问题在于我对AstractTableModel的实现。有人能帮我看一下并尽快改正吗?提前谢谢 ps.nh、vh、hNam、proc_1和proc_分别是整数、字符串、整数、字符串和字符串数组。它们保存要在表中显示的数据 public class TableModel exte

我是编程新手,正在做我的第一份学校作业。我已经编写了一个gui,它接受添加到jpaddedpane的jtable中的输入和输出数据。当表格第一次出现时,它会显示所有正确的数据。但当我输入新的输入时,表不会更新。我也不能肯定问题在于我对AstractTableModel的实现。有人能帮我看一下并尽快改正吗?提前谢谢

ps.nh、vh、hNam、proc_1和proc_分别是整数、字符串、整数、字符串和字符串数组。它们保存要在表中显示的数据

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

        TableModel()  {
            super();
            numRows = fnh;
            obj = new Object[fnh][5];

            for( int i = 0; i < fnh; i++ )  {
              for ( int j = 0; j < 5; j++ ) {
                  if ( j == 0 ) 
                      obj[i][0] = (Integer)nh[i];
                  else if ( j == 1 )
                      obj[i][1] = (String)hNam[i];
                  else if ( j == 2 )
                      obj[i][2] = (Integer)vh[i];
                  else if ( j == 3 )
                      obj[i][3] =(String)proc_1[i];
                  else 
                      obj[i][4] =(String)proc_2[i];        
               }
           }
        }

        @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;
        }        

        public void setValueAt( Object[][] value, int r, int c )  {
               value = obj;
               fireTableCellUpdated( r, c );
             }            

        }    
    }
公共类TableModel扩展了AbstractTableModel{
int numRows;
字符串colNames[]={“NH”、“马名”、“VH”,
“程序一”、“程序二”};
对象[][]对象;
TableModel(){
超级();
numRows=fnh;
obj=新对象[fnh][5];
对于(int i=0;i
这就是问题所在
value=obj

setValueAt
方法中,您没有将值设置为相应的
obj
值。访问
getValueAt
的方式类似地将获取的值设置为相应的数组位置

使用
ArrayList
而不是使用数组。您可以轻松访问所有方法

class TableData {       
    private String name;
    private String grade;
    private String subject;
    private String staff;
   // Add getters and setters.
}
这是使用ArrayList的TableModel示例

class AllTableModel extends AbstractTableModel {

    List<TableData> tableData = new ArrayList<TableData>();

    Object[] columnNames = {"Name", "Grade", "Subject", "Staff"};

    public AllTableModel(List<TableData> data) {

        tableData = data;
    }

    public List<TableData> getTableData() {
        return tableData;
    }

    @Override
    public String getColumnName(int column) {
        return columnNames[column].toString();
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public int getRowCount() {
        return tableData.size();
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        TableData data = tableData.get(rowIndex);
        switch (columnIndex) {
        case 0:
            return data.getName();
        case 1:
            return data.getGrade();
        case 2:
            return data.getSubject();
        case 3:
            return data.getStaff();
        default:
            return null;
        }
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        TableData data = tableData.get(rowIndex);
        switch (columnIndex) {
        case 0:
            data.setName(aValue == null ? null : aValue.toString());
        case 1:
            data.setGrade(aValue == null ? null : aValue.toString());
        case 2:
            data.setSubject(aValue == null ? null : aValue.toString());
        case 3:
            data.setStaff(aValue == null ? null : aValue.toString());
        }
    }

}
class AllTableModel扩展了AbstractTableModel{
List tableData=new ArrayList();
Object[]columnNames={“姓名”、“等级”、“科目”、“职员”};
公共AllTableModel(列表数据){
tableData=数据;
}
公共列表getTableData(){
返回表格数据;
}
@凌驾
公共字符串getColumnName(int列){
返回columnNames[column].toString();
}
@凌驾
public int getColumnCount(){
返回columnNames.length;
}
@凌驾
public int getRowCount(){
返回tableData.size();
}
@凌驾
公共对象getValueAt(int行索引、int列索引){
TableData数据=TableData.get(rowIndex);
开关(列索引){
案例0:
返回data.getName();
案例1:
返回data.getGrade();
案例2:
返回data.getSubject();
案例3:
返回data.getStaff();
违约:
返回null;
}
}
@凌驾
public void setValueAt(对象有效、int行索引、int列索引){
TableData数据=TableData.get(rowIndex);
开关(列索引){
案例0:
data.setName(aValue==null?null:aValue.toString());
案例1:
data.setGrade(aValue==null?null:aValue.toString());
案例2:
data.setSubject(aValue==null?null:aValue.toString());
案例3:
data.setStaff(aValue==null?null:aValue.toString());
}
}
}

我迷路了。你能把这两种方法重写给我吗?这样我就能更好地理解你了。@user2143292使用
List
而不是数组。您可以轻松访问方法。@user2143292如果答案有帮助,您可以接受它。