- 締切済み
JTableの複雑なヘッダー
下記サイトのGroupableHeaderExampleを参考にし、複数ヘッダを作成、使用していました。 しかし、バージョン1.4以降のJREでヘッダの上段部分が潰れるようになってしまい困っています。 どなたか、ご指導よろしくお願いします。 http://web.archive.org/web/20030418025148/www2.gol.com/users/tame/swing/examples/JTableExamples1.html
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- naopontan
- ベストアンサー率66% (2/3)
回答ではなく、報告ですが、 JavaSE 6 update7 では上記の対策でOKでしたが、 最新の JavaSE6 update10 ではNGでした。 また、プログラム修正かなぁ...
- kacchann
- ベストアンサー率58% (347/594)
>なぜこれで解決するのか 実は僕もよく知らないのです・・・。 「想像」+「勘」で答えてみます。 (自信度5%) ■まず前提 (1)-各swingコンポーネントのuiは、どうやって設定するのか- たぶん、setUI()で設定される・・・気がします。 (2)-各swingコンポーネントのデフォルトのuiは、いつ決定されてるのか- インスタンス生成時(コンストラクタ内)など・・・のような気がします。 例えばJPanelは JPanel{ ・・・ ・・・ updateUI();//←最終的にsetUI()に行き着く } (3)-JComponentA#updateUI()って何?- 各swingコンポーネントごとに実装(※上書き)されてるようですが、 その中身はたいてい public void updateUI() { setUI((HogeUI)UIManager.getUI(this)); } (4)-UIManager.getUI()って何?- swingフレームワークが規定する、「デフォルトのUI決定ルーチン」が きっと実装されてる・・・と思ってます。 (※たとえば、swingアプリを作った際、プログラマがなにもしなくても、 各コンポーネントにはデフォルトでなんらかのUIが適用されている) ■結論 ようするにJTableのheaderに独自のUIを適用したいなら table=new JTable();//テーブルを作成して header=table.getTableHeader();//テーブルのヘッダを取り出し header.setUI(new HogeUI());//ヘッダにUIを適用 のようにすればいいということです。 ようは、それだけです。 この方法が、一番わかりやすいと思います。 ■おまけ で、ひとつの考え方として、 この(上記「結論」部で書いた、)「独自UI適用処理」を 「headerのコンストラクタ内に埋め込んでしまおう」 という方針も、悪くはないと思います。 ようするに class HogeTableHeader{ HogeTableHeader(){ ・・・ setUI(new HogeUI()); } } というふうに。こうすれば、headerインスタンス生成時には、 自動的にheaderのUIも、独自のものに設定されていて便利ですよね。 例のサイトのサンプルは、この考えに基づいてます。 しかし、このサンプルで使っている Table(※JTableクラスの匿名インナークラス?)のコンストラクタは、 JTable(){ ・・・ header=createDefaultTableHeader()://ヘッダ生成 //(当然、このときにheaderには独自UIがすでに設定されてる) ・・・ updateUI();//テーブルのUIを設定 } となっていて、ここのupdateUI()メソッド(※JTable#updateUI())の実装は updateUI(){ ・・・ ・・・ header.updateUI();//←jdk1.5から存在。 } となっています。で、このheader(※JTableHeaderインスタンス?)の updateUI()の実装は、上記(3)のような、 「デフォルトUIを設定」するような実装 になってます。 これでは「headerにせっかく独自UIを設定した」意味がないので、 ここを書きつぶし(※上書きし)ました。 書きつぶすのは、ここじゃなくても、どこでもよかったのですが、 元のサンプルの方針(※独自Headerクラス内でUI決定)に従ってみました。
- kacchann
- ベストアンサー率58% (347/594)
GroupableTableHeader.javaに public void updateUI(){} と追記。
お礼
出来ました! 非常に助かりました。ありがとうございます。
補足
出来たのですが、なぜこれで解決するのかが今ひとつ理解に苦しんでおります。 よろしければ参考にしたいので簡単にでも、お聞きかせ願えますでしょうか。
お礼
詳しい説明ありがとうございます。 本当に助かりました!