独自のテーブル モデルを作成する最も簡単な方法は、AbstractTableModel から継承することです。次に、少なくとも getRowCount、getColumnCount、および getValueAt をオーバーライドします。
次に、「new JTable(mymodel)」を使用してテーブルを作成できます。ここで、「mymodel」は作成したモデルのインスタンスです。または、「new JTable」だけでテーブルを作成し、後で setModel を実行して、モデルを JTable に追加します。
たとえば、私はこれを何億回も行ってきましたが、これを頭のてっぺんから書いているので、明示または黙示の保証はありません。おそらく、どこかに構文エラーが1つまたは2つあります。
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 を作成する「通常の」方法は、デフォルト モデルを使用し、ベクトルのベクトルまたは 2 次元配列を作成してからデータを入力することだと考えていました。独自のモデルを作成することは、まれな、奇妙なケースで行うものだと思いました。しかし、デフォルトのモデルはまれで単純な場合にのみ最適な方法であることがわかりました。今では、ほとんどの場合、独自のモデルを作成しています。通常は、コード化も理解も容易です。通常、特定のフィールドで作成したクラスの 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 ステートメントを使用します。同じ考えです。