- PR -

JPanelの上に同じサイズのJPanelを貼ると…

投稿者投稿内容
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-07-09 13:31
rancoさん、有難う御座います。

解決しました。

仰っていることが良く分かりました。

 元々、JPnaelのIsOpaqueのデフォルトはtrueであるが、
 オーバーライドしたpaintComponentの中で全領域を塗りつぶしていないため、
 下にあるJPanelが表示されていた。

 しかし、これは上のJPanelが透明な訳ではなく、
 下のコンポーネントより小さいため、下のコンポーネントが透けて
 見えていただけである。

 サイズが同じJPanelを上に貼る場合は、下のコンポーネントは完全に隠れる
 ため、描画されない。

ということですね。

以下のコードを追加することで解決しました。

コード:
child.setOpaque(false);  // 場所も重要!!
child.setSize(new Dimension(CHILD_WIDTH, CHILD_HEIGHT));



有難う御座いました。

nagiseさん、
 毎度、有難う御座います。理解不足で失礼致しました。

ぴあちゃんさん、
 わざわざコードまで書いて頂いて感謝します。理解に役立ちました。

付記:

以下の記述があったため混乱しましたが、IsOpaque()で調べれば明快なことでした。
失礼致しましたm(__)m

> (JButton および JTree など)

の表記は改善を要求すべきですね。

[quate]
public void setOpaque(boolean isOpaque)
true の場合、コンポーネントはその境界内のすべてのピクセルをペイントします。false の場合、コンポーネントはピクセルの一部または全部をペイントしないので、その下のピクセルが透けて表示されます。
JComponent に対するこのプロパティーのデフォルト値は、false です。ただし、もっとも標準的な JComponent のサブクラス (JButton および JTree など) に対するこのプロパティーのデフォルト値は、Look & Feel に依存します。

パラメータ:
isOpaque - このコンポーネントが不透明な場合は true
関連項目:
isOpaque()
[/quate]

スキルアップ/キャリアアップ(JOB@IT)