java动态重置JTable的内容;设置列标题一次
在我的java代码中,我使用了JTable
。它不可编辑,它显示了一些内容
我必须:
- 设置列标题一次
- 动态设置内容
到目前为止,我有:
public class MyClass {
final JTable table;
public MyClass(List<List> changingContent, String[] columnHeaders) {
table = new JTable(new DefaultTableModel());
initTable(columnHeaders); //only done once
redrawTable(changingContent); //happens always when content changed
}
public void initTable(String[] columnHeaders) {
//???? 1)
}
public void redrawTable(List<List> content) {
int index = 0;
for(Object o:content) {
String[] rowData = presentAsStringArray(o);
for(int i=0; i<rowData.length; i++) {
int row = index;
int column = i;
//this produces an error since the rows don't exist yet
table.getModel().setValueAt(rowData[i], row, column);
}
index++;
}
}
}
我试图:
- 使用
DefaultTableModel
-constructor`DefaultTableModel(String[]ColumnHeader,int行)。它坏了,因为我不知道此时的行数(我也不知道,因为这可能会改变)李> - 一个想法:
setTableModel(new TableModel(data, columnHeaders)
在任何重画。但我想知道这是否是解决这个问题最低效的方法李>
我得到的错误:
- ArrayIndexOutOfBoundsException来自我试图用于设置列标题的下一行:
table.getColumnModel().getColumn(index).setValue(columnHeaders[index]);
我的猜测:必须存在TableColumn
才能使getColumn(index)
工作李> - ArrayIndexOutOfBoundsException在使用以下方法实例化
JTable
时,从重置内容(查找当前代码)中获得异常:new JTable(new DefaultTableModel(columnHeaders, 0);
(0
表示行数。我想这可能会起作用,因为我要重写它们。)我的猜测:行必须已经存在李>
TL;博士
- 在创建MyClass时,我获得了
JTable
的列标题李> - 我知道表数据的模型,但它是动态变化的李>
- 方法
redrawTable
将在任何更改时运行李> - 我找到了一种可以重新绘制细胞的方法。不幸的是,行数取决于李>
- 最后的猜测:我很确定在任何重画时都可以重置TableModel。但对我来说,这似乎不是很有效那么为什么(不)这样做呢强>
# 1 楼答案
这是正确的方法。您只需将行设置为0。只有在第一次创建表/模型时才能执行此操作
然后可以使用setRowCount(0)清除所有数据
然后使用DefaultTableModel的
addRow(...)
方法动态添加行所以你的基本逻辑是:
# 2 楼答案
不知道我是否理解你。当需要更改行数时,只需使用方法
DefaultTableModel.setRowCount(int)
。大概是这样的: