JTableにフッターを追加する
Total: 164
, Today: 2
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
JTable
にヘッダーとJTableHeader
で作成したソートやカラムの並び替え可能なフッターの両方を表示します。
Screenshot
Advertisement
サンプルコード
JTable table = new JTable(makeModel());
table.setAutoCreateRowSorter(true);
JTableHeader footer = new JTableHeader(table.getColumnModel());
footer.setTable(table);
JScrollPane south = new JScrollPane();
JViewport vp = new JViewport();
vp.setView(footer);
south.setColumnHeader(vp);
JPanel p = new JPanel(new BorderLayout());
p.add(new JScrollPane(table));
p.add(south, BorderLayout.SOUTH);
View in GitHub: Java, Kotlin解説
new JTableHeader(table.getColumnModel())
でColumnModel
を共有するJTableHeader
を作成してフッターとしてJPanel
に配置ColumnModel
の共有でヘッダー、フッターの両方でマウスでのカラム移動が同期可能- フッターで
JTableHeader#setTable(table)
と親JTable
を設定することでカラムクリックによるソートの同期が可能 - フッターカラムの幅をマウスでリサイズの不可
- ヘッダーカラムの幅をリサイズするとフッターカラムの幅も同期してリサイズは可能
BasicTableHeaderUI#changeColumnWidth(...)
で親の親がJScrollPane
かをチェックしているのでフッターをJScrollPane#setColumnHeader(...)
でJScrollPane
に配置してもリサイズは不可のまま?
Container container;
JTable table;
if ((th.getParent() == null) ||
((container = th.getParent().getParent()) == null) ||
!(container instanceof JScrollPane) ||
((table = th.getTable()) == null)) {
return 0;
}