为了账号安全,请及时绑定邮箱和手机立即绑定

添加数据后 JTable 不会更新

添加数据后 JTable 不会更新

元芳怎么了 2023-01-05 16:51:58
JTable从 SQL Server 2008 数据库添加行后不更新。在 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 surnameint maxval = Integer.parseInt(Validation.getNumberOfStudents(db)); //Counts the amount of students in the tableString[][] rowData = new String[maxval][50];model.setRowCount(0); //to reset the rowsfor (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 回答

?
森栏

TA贡献1810条经验 获得超5个赞

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


无需创建二维数组,因为您一次将一行数据添加到模型中。


此外,只需使用 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。在担心从数据库中获取数据之前,您首先要让它工作。


查看完整回答
反对 回复 2023-01-05
  • 1 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信