スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

この記事が役に立ったなら、
拍手を押してくれたら嬉しいな
 

Multi width header 複数列幅のヘッダ (JTable)

JTableの列見出し(JTableHeader)をカスタマイズして、複数列にまたがる見出しを作ってみる。
HTMLのtableにおけるcolspanみたいなもの。

ググってみるとこんなのが見つかった。
http://www.crionics.com/products/opensource/faq/swing_ex/JTableExamples1.html
当該ページが削除されたためWebArchiveに保存されたページにリンクしました
上記サイトのGroupable HeaderとかMulti-Width Headerのサンプルがズバリ目指すもの。
というか、これがそのまま動けばなんの問題もなかったのだが、JRE6.0では動かないので修正してみた。

GroupableHeaderExample on JRE6

修正箇所の要点は以下の通り
1). setUI(new GroupableTableHeaderUI()) はGroupableTableHeaderのコンストラクタではなく、
updateUIをオーバライドしてそこで行う。
コンストラクタでsetUIしても、updateUIでLook&Feel標準のものに置き換えられてしまうため。
You should call setUI(new GroupableTableHeaderUI()) not in the constructor of GroupableTableHeader but in overrided updateUI()

2). TableHeader.getHeaderRenderer()がnullを返す場合があるので、
TabelCellRederer.getDefaultRenderer()を代用する(GroupableTableHeaderUI.java の64,86行)。
nullを返す理由はよくわからないけど、たぶんSwingの内部仕様変更でしょう。
You should use TabelCellRederer.getDefaultRenderer() when TableHeader.getHeaderRenderer() returns null (at GroupableTableHeaderUI.java line 64 and 86).

3). TableColumnModel.getColumnMargin()の戻り値を適用しない(代わりに0を使う)。
こうしないと、ヘッダーの境界が1ドットづつずれる。これも仕様変更?
当該の箇所は GroupableTableHeader.java 58行目と、GroupableTableHeaderUI.java 27行目。
Do not apply the return value of TableColumnModel.getColumnMargin() (Use 0 instead).

修正版ソース(保存する際は拡張子を.javaに変えてね。)
ColumnGroup.java
GroupableTableHeader.java
GroupableTableHeaderUI.java
以下はオリジナルのソースと同じだが、一応念のため。
GroupableHeaderExample.java
MultiWidthHeaderExample.java
関連記事
FC2 Management

この記事が役に立ったなら、
拍手を押してくれたら嬉しいな
 

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

Q

Author:Q
仕事でjavaアプリ作ってます
趣味ではC ♯プログラミングも。

当ブログのソースは、自由に改変・再利用してOKです。
問題や改善点などあればご指摘いただければ幸い。

要所には拙い英訳もつけてみる(こっちは突っ込み無用で;)

カテゴリ
最新記事
最新コメント
最新トラックバック
月別アーカイブ
FC2カウンター
検索フォーム
リンク
Translation(自動翻訳)
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。