fireTableDataChanged似乎不适合我:
班级主要:
tblBookOfMonth = new JTable(tableModel);
tableModel.setData();
tableModel.fireTableDataChanged();
tblBookOfMonth.repaint();
frame.add(tblBookOfMonth, BorderLayout.CENTER);
frame.add(pnlNorth, BorderLayout.NORTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
类MySQLTableModel:
public class MySQLTableModel扩展AbstractTableModel {
private Object[][] data;
boolean bool = false;
public MySQLTableModel(Object[][] data) {
this.data = data;
}
public MySQLTableModel() {
this.data = new Object[0][0];
}
public void setData() {
bool = true;
}
@Override
public int getColumnCount() {
if(bool) {
return 4;
}
return 0;
}
@Override
public int getRowCount() {
if(bool) {
return 4;
}
return 0;
}
@Override
public Object getValueAt(int arg0, int arg1) {
return "test";
}
我删除了一半的代码并将其替换为测试代码,以尽量减少可能的错误来源,但我仍然无法弄清楚错误是什么。
表格应该显示一个4x4网格,说“测试”。 当我删除if子句并始终返回4时,它可以正常工作。
答案 0 :(得分:4)
fireTableDataChanged似乎不适合我:
这是什么意思?我们不介意读者。会发生什么,你期望发生什么?
如前所述,应该从TableModel本身调用fireXXX(()方法,而不是应用程序代码。这就是TableModel负责调用这些方法让表知道已经进行了更改。所以任何代码都应该从setData()方法中调用。
从快速查看代码看起来您正在尝试更改显示的列数。如果是这样,那么我怀疑你应该将以下代码添加到setData()方法:
fireTableStrucutreChanged();
这将告诉表格为TableModel中的每一列创建一个TableColum
,以便表格可以显示数据。