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);
Run Code Online (Sandbox Code Playgroud)
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";
}
Run Code Online (Sandbox Code Playgroud)
我删除了一半的代码并用测试代码替换它以尽量减少可能的错误源,但我仍然无法弄清楚出了什么问题。
表格应该显示一个 4x4 网格,上面写着“测试”。当我删除 if 子句并始终返回 4 时,它会正常工作。
fireTableDataChanged 似乎对我不起作用:
这意味着什么?我们不是读心术的人。会发生什么以及您期望发生什么?
正如已经提到的,fireXXX(() 方法应该从 TableModel 本身调用,而不是应用程序代码。也就是说,TableModel 负责调用这些方法来让表知道已进行更改。因此,任何代码都应该从在 setData() 方法中。
快速浏览一下代码,您似乎正在尝试更改显示的列数。如果是这样,那么我怀疑您应该将以下代码添加到 setData() 方法中:
fireTableStrucutreChanged();
Run Code Online (Sandbox Code Playgroud)
这将告诉表为 TableModel 中的每一列创建一个TableColum,以便表可以显示数据。
| 归档时间: |
|
| 查看次数: |
2763 次 |
| 最近记录: |