在我的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
- 构造函数`DefaultTableModel(String [] columnHeaders,int rows)。它变坏了,因为我不知道此时的行数(我不知道,因为这可能会改变。)setTableModel(new TableModel(data, columnHeaders)
在任何重绘。但我想知道这不是解决这个问题的最有效方法。table.getColumnModel().getColumn(index).setValue(columnHeaders[index]);
我猜: TableColumn
已经有存在使getColumn(index)
工作。JTable
:new JTable(new DefaultTableModel(columnHeaders, 0);
(0
表示行数。我认为这可行,因为我要重写它们。)我猜:行已经存在。JTable
的列标题。redrawTable
将在任何更改时运行。答案 0 :(得分:0)
不确定我是否纠正了你。当您需要更改行数时,只需使用方法DefaultTableModel.setRowCount(int)
即可。像这样:
public class MyClass {
final JTable table;
final DefaultTableModel model;
public MyClass(List<List> changingContent, String[] columnHeaders) {
model = new DefaultTableModel(columnHeaders, 0); // init model with 0 rows
table = new JTable(model);
redrawTable(changingContent); //happens always when content changed
}
public void redrawTable(List<List> content) {
model.setRowCount(content.size()); // set the correct row count here
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
model.setValueAt(rowData[i], row, column);
}
index++;
}
}
}
答案 1 :(得分:0)
使用DefaultTableModel构造函数`DefaultTableModel(String [] columnHeaders,int rows)。它变坏了,因为我不知道此时的行数(我不知道,因为这可能会改变。)
这是正确的方法。您只需将行设置为0.只有在第一次创建表/模型时才会这样做。
动态设置内容
然后您可以使用setRowCount(0);
清除所有数据然后使用DefaultTableModel的addRow(...)
方法动态添加行。
所以你的基本逻辑是:
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.setRowCount(0);
for(Object o:content)
{
String[] rowData = presentAsStringArray(o);
model.addRow( rowData );
}