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)类 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 doesn't seem to work for me:
这是什么意思?我们不是读心术的人。会发生什么以及您期望发生什么?
正如已经提到的,fireXXX(() 方法应该从 TableModel 本身调用,而不是应用程序代码。也就是说,TableModel 负责调用这些方法来让表知道已进行更改。因此任何代码都应该从 setData() 方法中调用。
快速浏览一下代码,您似乎正在尝试更改显示的列数。如果是这样,那么我怀疑您应该将以下代码添加到 setData() 方法中:
fireTableStrucutreChanged();
这将告诉表为 TableModel 中的每一列创建一个 TableColum
,以便表可以显示数据。
关于Java fireTableDataChanged() 不更新 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27332670/