添加数据后JTable将不会更新

时间:2019-06-06 14:57:51

标签: java swing jtable

从SQL Server 2008数据库添加行后,

JTable不会更新。

在jaybird 2.2.5上使用Netbeans 8.2,我尝试将setModel()移动到不同的地方,我使用过fireTableDataChanged()repaint(),但没有任何反应。

String[] colNames = {"#", "Name", "Surname", "Grades", "House", "Prefect"};
DefaultTableModel model = new DefaultTableModel(colNames, 0);
Validation.newStudent(db, stringName, stringSurname); //Creates a new row with a name and a surname
int maxval = Integer.parseInt(Validation.getNumberOfStudents(db)); //Counts the amount of students in the table

String[][] rowData = new String[maxval][50];
model.setRowCount(0); //to reset the rows
for (int i = 0; i < maxval; i++){
    String[] row = new String[maxval];

    for (int j = 0; j < maxval; j++){

        rowData[i][0] = Integer.toString(i+1);
        rowData[i][1] = Validation.listStudentNames(db).get(i);
        rowData[i][2] = Validation.listStudentSurnames(db).get(i);
        rowData[i][3] = Validation.studentsByGrade(db).get(i);
        rowData[i][4] = Validation.studentsByHouse(db).get(i);


        if (Validation.listPrefects(db).get(i) == null){ //checks if a student is a prefect
            rowData[i][5] = "No";
        }else{
            rowData[i][5] = "Yes";
        }

        row[j] = rowData[i][j];
    }
    model.addRow(row); 
}teacherContentTable.setModel(model);

该表应该随新学生一起更新,但保留了旧的表模型。

1 个答案:

答案 0 :(得分:1)

没有回答您的问题,但是重新填充模型的逻辑过于复杂。

由于您一次将数据添加到模型的一行中,因此无需创建2D数组。

此外,只需使用Vector,因为DefaultTableModel仍将行数组转换为Vector。

因此,代码的基本结构将更像:

String[] colNames = {"#", "Name", "Surname", "Grades", "House", "Prefect"};
DefaultTableModel model = new DefaultTableModel(colNames, 0);
Validation.newStudent(db, stringName, stringSurname); 
int maxval = Integer.parseInt(Validation.getNumberOfStudents(db)); 

for (int i = 0; i < maxval; i++)
{
    Vector<String> row = new Vector<String>();

    for (int j = 0; j < maxval; j++){

        row.add( Integer.toString(i+1) );
        row.add( Validation.listStudentNames(db).get(i) );
        row.add( Validation.listStudentSurnames(db).get(i) );
        ...
    }

    System.out.println( row ); // make sure you actually add data to the model.
    model.addRow(row); 
}

teacherContentTable.setModel(model);

现在,假设您实际向模型中添加了数据,表将被更新,再次假设您对添加到框架的JTable实例具有正确的引用。

编辑:

上面的代码与您陈述的用新模型更新JTable的问题确实无关。

可以用一行代码代替:

teacherContentTable.setModel( new DefaultTableModel(5, 5) );

您现在应该看到一个包含5行和5列的空JTable。您首先要进行此工作,然后再担心要从数据库中获取数据。