Swing/GroupableTableHeader のバックアップの現在との差分(No.1)
- category: swing folder: GroupableTableHeader title: JTableHeaderでTableColumnのグループ化を行う tags: [JTable, JTableHeaer, TableColumn] tags: [JTable, JTableHeader, TableColumn] author: aterai pubdate: 2016-05-02T00:35:46+09:00 description: TableColumnのグループ化を可能にし、JTableHeaderでの列結合を実現します。 image:
概要
概要
TableColumn
のグループ化を可能にし、JTableHeader
での列結合を実現します。Screenshot
Advertisement
サンプルコード
サンプルコード
#spanadd
/** GroupableTableHeader
#spanend
* http://www2.gol.com/users/tame/swing/examples/JTableExamples1.html
* @version 1.0 10/20/98
* @author Nobuo Tamemasa
* modified by aterai@outlook.com
*/
class GroupableTableHeader extends JTableHeader {
private transient List<ColumnGroup> columnGroups;
protected GroupableTableHeader(TableColumnModel model) {
super(model);
}
#spanadd
#spanend
@Override public void updateUI() {
super.updateUI();
setUI(new GroupableTableHeaderUI());
}
//@Override public boolean getReorderingAllowed() {
// return false;
//}
@Override public void setReorderingAllowed(boolean b) {
super.setReorderingAllowed(false);
#spanadd
#spanend
@Override public boolean getReorderingAllowed() {
return false;
}
#spanadd
#spanend
public void addColumnGroup(ColumnGroup g) {
if (columnGroups == null) {
columnGroups = new ArrayList<>();
}
columnGroups.add(g);
}
#spanadd
#spanend
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
メソッド?を最新版に更新 - ヘッダセルと本体セルがずれてしまうので
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
でいくつか変更点がある -
revised by Java2s.com
でいくつか変更点がある模様
-