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,以便表可以显示数据。

10-06 05:14