概念は、DefaultTableModel を独自のクラスでサブクラス化することです。たとえば、ジョブのテーブルを表示したい場合は、JobsTableModel というクラスを作成できます。JobsTableModel は通常、コンストラクターに渡される Job 型のオブジェクトのコレクションを持ちます。JobsTableModel は、次の質問に対する回答を提供できる必要があります。
- 列は何列ありますか
- 列はいくつありますか
- 列 X の名前は何ですか
- 列 X のデータ型は何ですか
- セル (X,Y) の値は何ですか
これは、次のメソッドをオーバーライドすることによって行われます。
public int getRowCount()
public int getColumnCount()
public String getColumnName(int columnIndex)
public Class<?> getColumnClass(int columnIndex)
public Object getValueAt(int rowIndex, int columnIndex)
JTable の実装では、この情報を使用してテーブルにデータを入力できます。各セルに値を設定する必要はありません。さらに、JTable の実装により、並べ替えと列の並べ替えが無料で自動的に行われます。各セルに直接データを入力する必要がある場合、これらを扱うのは悪夢です。
幅を正しくすることに関しては、これを自動的に行う方法はないと思います。試行錯誤を繰り返すだけです。次のように、列の幅をピクセル単位で設定できます。
TableColumn column = table.getColumnModel().getColumn(i);
column.setPreferredWidth(width);