Swing/GroupableTableHeader のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/GroupableTableHeader へ行く。
- title: JTableHeaderでTableColumnのグループ化を行う tags: [JTable, JTableHeaer, TableColumn] author: aterai pubdate: 2016-05-02T00:35:46+09:00 description: TableColumnのグループ化を可能にし、JTableHeaderでの列結合を実現します。
概要
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
でいくつか変更点がある