dポイントプレゼントキャンペーン実施中!

添付した画像のような「ピラミッドのように大きいコンポーネントの上にだんだん小さなコンポーネントを重ねていく」のではないコンポーネントの重ね方がしたいです。そのようなことは可能なのでしょうか?
やりたいこととしては、メインとなるパネルのその上で別のレイアウトをしたパネルを重ねたいです。

普通のレイアウトマネージャでaddで重ねるのでは、どうやってもうまくいきません。

OverlayLayoutも試してみましたが、以下の二つのパターンではうまくいきませんでした。
注:TopPanel,MainPanel,StringPanelはJPanelを継承した自作のクラスです
理想はMainPanel < StringPanel < TopPanelなのですが・・

JPanel basePanel = new JPanel();
basePanel.setLayout(new OverlayLayout(basePanel));

topPanel = new TopPanel();
topPanel.setOpaque(false);
basePanel.add(topPanel);

mainPanel = new MainPanel();
mainPanel.setLayout(new BorderLayout());
stringPanel = new StringPanel();
stringPanel.setPrintSpeed(50);
stringPanel.setBorder(new BevelBorder(BevelBorder.RAISED));
mainPanel.add("South", stringPanel);
basePanel.add(mainPanel);

add(basePanel);

この場合だと、MainPanel < TopPanel < StringPanelの関係になってしまいます

JPanel basePanel = new JPanel();
basePanel.setLayout(new OverlayLayout(basePanel));

mainPanel = new MainPanel();
mainPanel.setLayout(new BorderLayout());
stringPanel = new StringPanel();
stringPanel.setPrintSpeed(50);
stringPanel.setBorder(new BevelBorder(BevelBorder.RAISED));
mainPanel.add("South", stringPanel);
basePanel.add(mainPanel);

topPanel = new TopPanel();
topPanel.setOpaque(false);
basePanel.add(topPanel);

add(basePanel);
こうするとTopPanelの描画が見えなかったのでおそらくTopPanel < MainPanel < StringPanelとなってます。

ご教示願います・・!

「JPanelの重ね方/OverlayLa」の質問画像

A 回答 (2件)

なんか返事がないから、追加発言するか迷ったが、レイヤー的なイメージと、提示ソースでのpanel の入れ子があってないと思う。


OverlayLayoutで、3つを重ね表示するなら、3つの大本となる basePanel に OverlayLayoutを設定した後、上におきたいものから順に、basePanel の子として全部addすればいいだけだと思う。OverlayLayout では、add順でしか重ね順は指定できない。
JLayeredPaneは、重ね順の変更が可能。
    • good
    • 0
この回答へのお礼

お礼を忘れていて本当に申し訳ありません・・!
JLayerdPaneで層のある状態を作り出すことができました。

OverlayLayoutでは子の子(孫)のパネルが正しく扱われないということでしょうか。

まだどちらも正しく理解し、扱えているとは思えませんが、この問題について解決することができました。
本当にありがとうございました。

お礼日時:2014/05/17 01:06

透過して、重ね表示するならJLayeredPaneのほうがいいのでは?


http://docs.oracle.com/javase/jp/7/api/javax/swi …
http://docs.oracle.com/javase/tutorial/uiswing/c …
    • good
    • 0

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