Java fireTableDataChanged()未更新JTable

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

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()方法添加以下代码:

这将告诉表为TableModel中的每一列创建一个
TableColu
,以便表可以显示数据

fireTableDataChanged似乎对我不起作用:

这意味着什么?我们不是读心术的人。会发生什么?你期望会发生什么

如前所述,应该从TableModel本身调用fireXXX(())方法,而不是从应用程序代码调用。也就是说,TableModel负责调用这些方法,让表知道已进行了更改。因此,任何代码都应该从setData()方法内调用

通过快速查看代码,您似乎正在尝试更改显示的列数。如果是这样,我怀疑您应该向setData()方法添加以下代码:


这将告诉表为TableModel中的每一列创建一个
TableColu
,以便表可以显示数据。

谢谢,FireTableStructureChanged()完成了这项工作(现在将其放入我的TableModel类中)很抱歉代码不好,我在过去的一个小时内删除并插入代码以查找错误。这就是为什么它没有结构化并且毫无意义。谢谢,FireTableStructureChanged()完成了这项工作(现在将其放入我的TableModel类中)很抱歉,错误的代码,我在过去的一个小时里删除并插入代码来查找错误。这就是为什么它没有结构化,毫无意义。
 fireTableStrucutreChanged();