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);
该表应该随新学生一起更新,但保留了旧的表模型。
答案 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。您首先要进行此工作,然后再担心要从数据库中获取数据。