I want to layout my JPane like so:
-------
| |
| |
| |
-------
| |
-------
This way, the top section is bigger/taller than the bottom section (the top section consists of another JPanel and uses the Graphics object to display an image, while the bottom section also consists of another JPanel but uses the Graphics object to draw some lines and text).
I’ve heard that the best way to do this was using the GridBagLayout and GridBagConstraints.
I’m trying to figure out the appropriate properties for the GridBagConstraints, and I’m having some difficulties. This is what I have so far…
For the top part, I have:
gridx = 0
gridy = 0
weighty = 1.0; // expand downwards, because the bottom should never expand in the Y direction
fill = GridBagConstraints.BOTH
For the bottom part, I have:
gridx = 0
gridy = 1
fill = GridBagConstraints.HORIZONTAL
anchor = GridBagConstraints.PAGE_END
Unfortunately, all the ends up happening is a large gray rectangle appears (I have a white background for the application) – no images load, no lines/text appear.
What should I do? What should I adjust?
I’ve read a few tutorials, but it just seems really confusing, I got it working in my first application, but now when I try to do this it just doesn’t seem to work for me.
In general, for gridbag layout
if you want a component scale, you must give its scale direction a weight, and any sizes (width/height) you set for that direction will be ignored by the layout manager.
If you don’t want a component scale, the component must have its size defined (if you want, you can dig into this topic in documents of java). In your case of the bottom panel, you need to give its, at least, a preferred height.
This can work as your expectation
Further more, if you want to use gridbag layout, I recommend you to try the painless-gridbag library http://code.google.com/p/painless-gridbag/ (I’m the author of that library). It doesn’t solve this problem for you (as your problem concerns managing component’s size in gridbag layout) but it will save you a lot of typing and make your code easier to maintain