user5380876
user5380876

Reputation:

JPanel on top of another JPanel

I have been using JPanels for a while and now want to place a JPanel on top of another JPanel.

I have looked at using JLayer but I was wondering If there is a solution to just set the layer of the bottom and top, I don't want to set each components layer if possible.

Example

JPanel bottomPanel = new JPanel();      # Set as bottom panel
JPanel topPanel = new JPanel();         # Set as top panel
JPanel sidePanel = new JPanel();        # Don't have to set
JPanel anotherSidePanel = new JPanel(); # Don't have to set

If this isn't possible what is the best solution for this, Thanks.

Upvotes: 2

Views: 8859

Answers (3)

M_Dragon
M_Dragon

Reputation: 83

I know this is quite late, but if anyone now has this issue, I suggest using a BoxLayout. BorderLayout can only have one cell in each of its five locations, and GridLayout's cells are all the same dimension. If you want to stack different sized JPanels, here's how BoxLayout can be implemented:

JFrame frame = new JFrame("Intro to BoxLayout");
JPanel container = new JPanel();

JPanel panel1 = new JPanel();
panel1.setPreferredSize(new Dimension(X1, Y1));
JPanel panel2 = new JPanel();
panel2.setPreferredSize(new Dimension(X2, Y2));

container.setLayout(new BoxLayout(container, BoxLayout.PAGE_AXIS));
container.add(panel1);
container.add(panel2);

frame.add(container);
frame.pack();
frame.setVisible(true);

where X1, Y1, X2, Y2 are arbitrary panel dimensions.

Upvotes: 3

ds777fighter
ds777fighter

Reputation: 83

It sounds like what you want is a layout manager. There are a few different ones that suit different needs. There's a link at the bottom of this post.

My personal favorite is GridLayout. So for what you want to do, you can do this:

JPanel panel = new JPanel();
panel.setLayout(new GridLayout(2, 1));
//the first number is the number of rows, the second is the number of columns

JPanel topPanel = new JPanel();
JPanel bottomPanel = new JPanel();
panel.add(topPanel);
panel.add(bottomPanel);

That will do what you want.

If you wanted to read more about them, here's a link: Oracle Docs on Layout Managers

Upvotes: 3

camickr
camickr

Reputation: 324108

You can have the main panel use a BorderLayout.

Then you can do something like:

mainPanel.add(leftSide, BorderLayout.LINE_START);
mainPanel.add(rightSide, BorderLayout.LINE_END);
JLayeredPane lp = new JLayeredPane();
mainPanel.add(lp, BorderLayout.CENTER);

Upvotes: 3

Related Questions