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

添加数据后 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 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 回答

?
森栏

TA贡献1549条经验 获得超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

添加回答

举报

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