Swing/GroupableTableHeader のバックアップ(No.6)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/GroupableTableHeader へ行く。
- 1 (2016-05-02 (月) 00:43:47)
- 2 (2016-05-24 (火) 19:30:03)
- 3 (2016-09-28 (水) 20:10:08)
- 4 (2017-11-07 (火) 13:54:06)
- 5 (2018-11-21 (水) 18:29:07)
- 6 (2019-01-18 (金) 17:15:35)
- 7 (2019-07-18 (木) 16:48:20)
- 8 (2021-03-21 (日) 04:15:49)
- 9 (2025-01-03 (金) 08:57:02)
- 10 (2025-01-03 (金) 09:01:23)
- 11 (2025-01-03 (金) 09:02:38)
- 12 (2025-01-03 (金) 09:03:21)
- 13 (2025-01-03 (金) 09:04:02)
- category: swing
folder: GroupableTableHeader
title: JTableHeaderでTableColumnのグループ化を行う
tags: [JTable, JTableHeader, TableColumn]
author: aterai
pubdate: 2016-05-02T00:35:46+09:00
description: TableColumnのグループ化を可能にし、JTableHeaderでの列結合を実現します。
image:
概要
TableColumn
のグループ化を可能にし、JTableHeader
での列結合を実現します。Groupable Header - JTable Examples 1からの引用です。
Screenshot

Advertisement
サンプルコード
/** GroupableTableHeader
* http://www2.gol.com/users/tame/swing/examples/JTableExamples1.html
* @version 1.0 10/20/98
* @author Nobuo Tamemasa
* modified by aterai aterai@outlook.com
*/
class GroupableTableHeader extends JTableHeader {
private transient List<ColumnGroup> columnGroups;
protected GroupableTableHeader(TableColumnModel model) {
super(model);
}
@Override public void updateUI() {
super.updateUI();
setUI(new GroupableTableHeaderUI());
}
@Override public boolean getReorderingAllowed() {
return false;
}
//@Override public void setReorderingAllowed(boolean b) {
// super.setReorderingAllowed(false);
//}
public void addColumnGroup(ColumnGroup g) {
if (columnGroups == null) {
columnGroups = new ArrayList<>();
}
columnGroups.add(g);
}
public List<?> getColumnGroups(TableColumn col) {
if (columnGroups == null) {
return Collections.emptyList();
}
for (ColumnGroup cGroup : columnGroups) {
List<?> groups = cGroup.getColumnGroupList(col, new ArrayList<Object>());
if (!groups.isEmpty()) {
return groups;
}
}
return Collections.emptyList();
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JTableHeader
に列のグループ化設定を追加し、BasicTableHeaderUI#paint(...)
をオーバーライドしてヘッダセルの描画領域を変更することで、TableColumn
の列結合を実現しています。
オリジナルからの主な変更点:- ヘッダセルと本体セルがずれてしまうので、
header.getColumnModel().getColumnMargin()
で取得した余白を無視 - グループ化設定の保持に、
Vector
ではなくArrayList
を使用 - グループ化設定がない場合は、
null
ではなくCollections.emptyList()
を返す BasicTableHeaderUI
からコピーしている各private
メソッドを最新版に更新
- ヘッダセルと本体セルがずれてしまうので、
参考リンク
Groupable Header - JTable Examples 1- オリジナル版
- Groupable(Group) Header Example : Grid Table « Swing Components « Java
revised by Java2s.com
で、いくつか変更点がある模様