Java fireTableDataChanged()未更新JTable
fireTableDataChanged似乎对我不起作用: 班长:Java fireTableDataChanged()未更新JTable,java,swing,Java,Swing,fireTableDataChanged似乎对我不起作用: 班长: tblBookOfMonth = new JTable(tableModel); tableModel.setData(); tableModel.fireTableDataChanged(); tblBookOfMonth.repaint(); frame.add(tblBookOfMonth, BorderLayout.CENTER); frame.add(pnlNorth
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()方法添加以下代码:
这将告诉表为TableModel中的每一列创建一个TableColu
,以便表可以显示数据
fireTableDataChanged似乎对我不起作用:
这意味着什么?我们不是读心术的人。会发生什么?你期望会发生什么
如前所述,应该从TableModel本身调用fireXXX(())方法,而不是从应用程序代码调用。也就是说,TableModel负责调用这些方法,让表知道已进行了更改。因此,任何代码都应该从setData()方法内调用
通过快速查看代码,您似乎正在尝试更改显示的列数。如果是这样,我怀疑您应该向setData()方法添加以下代码:
这将告诉表为TableModel中的每一列创建一个
TableColu
,以便表可以显示数据。谢谢,FireTableStructureChanged()完成了这项工作(现在将其放入我的TableModel类中)很抱歉代码不好,我在过去的一个小时内删除并插入代码以查找错误。这就是为什么它没有结构化并且毫无意义。谢谢,FireTableStructureChanged()完成了这项工作(现在将其放入我的TableModel类中)很抱歉,错误的代码,我在过去的一个小时里删除并插入代码来查找错误。这就是为什么它没有结构化,毫无意义。
fireTableStrucutreChanged();