プロが教えるわが家の防犯対策術!

下記サイトのGroupableHeaderExampleを参考にし、複数ヘッダを作成、使用していました。
しかし、バージョン1.4以降のJREでヘッダの上段部分が潰れるようになってしまい困っています。
どなたか、ご指導よろしくお願いします。

http://web.archive.org/web/20030418025148/www2.g …

A 回答 (3件)

回答ではなく、報告ですが、


JavaSE 6 update7 では上記の対策でOKでしたが、
最新の JavaSE6 update10 ではNGでした。

また、プログラム修正かなぁ...
    • good
    • 0

>なぜこれで解決するのか



実は僕もよく知らないのです・・・。
「想像」+「勘」で答えてみます。
(自信度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決定)に従ってみました。
    • good
    • 0
この回答へのお礼

詳しい説明ありがとうございます。
本当に助かりました!

お礼日時:2007/08/08 10:35

GroupableTableHeader.javaに


public void updateUI(){}
と追記。

この回答への補足

出来たのですが、なぜこれで解決するのかが今ひとつ理解に苦しんでおります。
よろしければ参考にしたいので簡単にでも、お聞きかせ願えますでしょうか。

補足日時:2007/08/06 18:41
    • good
    • 0
この回答へのお礼

出来ました!
非常に助かりました。ありがとうございます。

お礼日時:2007/08/06 10:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!