创建自己的表模型最直接的方法是从 AbstractTableModel 继承。然后至少覆盖 getRowCount、getColumnCount 和 getValueAt。
然后,您可以使用“new JTable(mymodel)”创建表,其中“mymodel”是您创建的模型的一个实例,或者您可以只使用“new JTable”创建它,然后稍后执行 setModel 来附加您的模型到 JTable。
例如——虽然我已经做了无数次了,但我还是在脑海中写下了这个,所以没有明示或暗示的保证,很可能在某个地方有一两个语法错误:
class ArrayListModel extends AbstractTableModel
{
ArrayList<Object[]> list;
public ArrayListModel(ArrayList<Object[]> list)
{
this.list=list;
}
public int getRowCount()
{
return list.size();
}
public int getColumnCount()
{
if (list.size()==0)
{
return 0;
}
else
{
return list.get(0).length;
}
}
public Object getValueat(int row, int column)
{
return list.get(row)[column];
}
}
... somewhere else ...
ArrayListModel mymodel=new ArrayListModel(somedata);
JTable mytable=new JTable(mymodel);
... etc ...
旁注:当我第一次学习 Java 时,我认为创建 JTable 的“正常”方法是使用默认模型,创建向量向量或二维数组,然后进行填充。我认为创建自己的模型将是您在罕见的奇怪情况下所做的事情。但我后来发现默认模型只是在罕见的简单情况下的最佳方式。现在我几乎总是创建自己的模型:它通常更容易编码和更容易理解。通常我有一个使用特定字段创建的某个类的 ArrayList,然后在我的模型类中我有类似的东西:
public Object getValueAt(int row, int col)
{
Whatever w=list.get(row);
if (col==0) return w.foo;
else if (col==1) return w.bar;
else if (col==2) return w.plugh;
else throw SomeException();
}
或者使用 case 语句。同样的想法。