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:
公共类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时,它会按预期工作。
最佳答案
fireTableDataChanged似乎不适用于我:
这意味着什么?我们不是读者的介意。会发生什么,您期望发生什么?
如前所述,应该从TableModel本身而不是应用程序代码中调用fireXXX(()方法。也就是说,TableModel负责调用这些方法以使表知道已进行更改,因此任何代码都应从在setData()方法中。
通过快速查看代码,您似乎正在尝试更改显示的列数。如果是这样,那么我怀疑您应该将以下代码添加到setData()方法中:
fireTableStrucutreChanged();
这将告诉表为TableModel中的每一列创建一个
TableColum
,以便表可以显示数据。