1

JLayeredPane があります。私のプログラムは次のように動作します:

JPanel p1 = new JPanel(new BoxLayout(p1, BoxLayout.X_AXIS));
JPanel p2 = new JPanel(new BoxLayout(p2, BoxLayout.Y_AXIS));
JLayeredPane lp = new JLayeredPane();
lp.add(p1, 1);
lp.add(p2, 0);

p1 と p2 の両方に、ボタンなどのコンポーネントがあります...

問題は、両方の JPanel を JLayeredPane に追加すると、何も表示されないことです。

JLayeredPane()のレイアウトを変えてみました。

たとえば、次のようにしました。

lp.setLayout(new BoxLayout(lp, BoxLayout.X_AXIS));

次に、JPanels は表示されますが、JLayeredPane のレイヤーを考慮せずに隣接して表示されます。

null レイアウトを使用する必要がありますか?

JLayeredPane でレイヤーを尊重し、2 つの BoxLayout JPanel を正しく表示するにはどうすればよいですか?

JLayeredPane にレイアウトを与えると、パネルが表示されますが、レイヤーはまったく尊重されません。

4

3 に答える 3

5

Z 軸を理解するレイアウト マネージャーが必要です。デフォルトのレイアウト マネージャーは、JLayeredPane の Z 軸を認識しません。

単純に互いの上にオーバーレイしたい場合は、次のように LayoutManager を使用できます。

JLayeredPane layeredFooPane = new JLayeredPane();
// The magic!
layeredFooPane.setLayout(new LayeredPaneLayout(layeredPane));
// Add components:
layeredFooPane.add(fooComponent, new Integer(JLayeredPane.DEFAULT_LAYER + 10));
layeredFooPane.add(barComponent, JLayeredPane.DEFAULT_LAYER);

LayoutManager クラス:

public class LayeredPaneLayout implements LayoutManager {

    private final Container target;
    private static final Dimension preferredSize = new Dimension(500, 500);

    public LayeredPaneLayout(final Container target) {
            this.target = target;
    }

    @Override
    public void addLayoutComponent(final String name, final Component comp) {
    }

    @Override
    public void layoutContainer(final Container container) {
            for (final Component component : container.getComponents()) {
                    component.setBounds(new Rectangle(0, 0, target.getWidth(), target.getHeight()));
            }
    }

    @Override
    public Dimension minimumLayoutSize(final Container parent) {
            return preferredLayoutSize(parent);
    }

    @Override
    public Dimension preferredLayoutSize(final Container parent) {
            return preferredSize;
    }

    @Override
    public void removeLayoutComponent(final Component comp) {
    }
}
于 2013-04-15T22:57:26.190 に答える
1

私は同様の問題を抱えていました。ペインを追加するときにレイヤーを渡す代わりに、個別に実行してみてください。

lp.setLayer(p1, 1);
lp.setLayer(p2, 0);
lp.add(p1);
lp.add(p2);

コンポーネントを追加する前に、レイヤーを定義する必要があります。0 の代わりに JLayeredPane.DEFAULT_LAYER を使用することもできます。

私の場合、私の JLayeredPane には GridBagLayout がありましたが、デフォルトのレイアウトで動作するかどうかはわかりません。

于 2018-03-07T00:00:27.823 に答える