• 締切済み

JPanelの重ね方/OverlayLayout他

添付した画像のような「ピラミッドのように大きいコンポーネントの上にだんだん小さなコンポーネントを重ねていく」のではないコンポーネントの重ね方がしたいです。そのようなことは可能なのでしょうか? やりたいこととしては、メインとなるパネルのその上で別のレイアウトをしたパネルを重ねたいです。 普通のレイアウトマネージャで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となってます。 ご教示願います・・!

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

なんか返事がないから、追加発言するか迷ったが、レイヤー的なイメージと、提示ソースでのpanel の入れ子があってないと思う。 OverlayLayoutで、3つを重ね表示するなら、3つの大本となる basePanel に OverlayLayoutを設定した後、上におきたいものから順に、basePanel の子として全部addすればいいだけだと思う。OverlayLayout では、add順でしか重ね順は指定できない。 JLayeredPaneは、重ね順の変更が可能。

dossi
質問者

お礼

お礼を忘れていて本当に申し訳ありません・・! JLayerdPaneで層のある状態を作り出すことができました。 OverlayLayoutでは子の子(孫)のパネルが正しく扱われないということでしょうか。 まだどちらも正しく理解し、扱えているとは思えませんが、この問題について解決することができました。 本当にありがとうございました。

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

関連するQ&A

専門家に質問してみよう