+2  A: 

There is no real answer to your question except that: it depends. It depends on what kind of frame (form) you are trying to create. I am no Swing-guru, but created a couple of (moderately advanced) GUI's and have never had the need to touch the GridBagLayout manager. I have always been able to create my GUI's using a combination of "easier" layout managers. For example, you can give your frame the BorderLayout and then place another layout in the SOUTH of that BorderLayout.

Bart Kiers
I tried getting away with using only the simple layouts when I first started Java programming, but quickly found that this led to undesirable behavior when resizing the application window.
rob
+15  A: 

MiGLayout, no doubt. Honestly, it's the only Swing layout manager I know of that makes any sense.

The mere fact that there are 8 layout managers in the core JDK is a good sign that the Swing creators had absolutely no idea about what they were trying to do. This is not to trash the rest of the Swing - it's a good GUI toolkit, except for the layout managers.

Joonas Pulakka
+1 - that's why I like SO, your're always pointed to libraries and tools that can make your life easier :) Thanks for the link!
Andreas_D
If you're trying to do anything moderately complex, or you want layout to respect system-specific component spacing, MigLayout is absolutely the best layout manager I've ever seen. It's also quite easy to do simple things. The only other layout manager I can see any reason for using is CardLayout, as it provides something rather different from any other layout manager.
uckelman
Having eight implementations of an interface is not a sign of weakness! (Although there is no guarantee that there are no unrelated weaknesses.)
Tom Hawtin - tackline
Granted - it could also be an intentional design decision. However, given that the amount has *grown* to 8 little by little as each JDK was released, it looks just like an attempt to fix earlier bad implementations.
Joonas Pulakka
-1 Disagree 100%. Different layout managers for different purposes, which can be combined to do almost anything. There's nothing wrong with that,
Michael Borgwardt
Like different machine instructions are for different purposes and can be combined to do almost anything. There's nothing wrong with that, but I'll rather use higher-level languages to achieve the same effect with less effort.
Joonas Pulakka
I'm with Joonas here. Those layouts look like they build on experienced gained over time. Nothing wrong with that, but it means some of the older ones are less useful than they could be.
Carl Smotricz
And we have a winner (by sheer weight of agreement). Pardon me for taking so long to accept, it slipped my mind!
Carl Smotricz
+3  A: 

It depends which kind of layout you need, that's why you have 8 of them:

  1. BorderLayout, simple and quite useful to design normal content frames (with main content in the middle and helpers on sides).
  2. GridLayout, useful when you have a grid of objects that should be of the same size (buttons? textfields?).
  3. GridBagLayout, very flexible, needs some tweaking to be fine and it is quite verbose (but I raccomend it if you want to do things well).
  4. FlowLayout, useless.. not a very layout: just placing item one next to another.
  5. CardLayout, useful for tabs or subviews that must be switched.
  6. BoxLayout, never used it too much.. it should be a sort of enhanced FlowLayout but it's not enough flexible to be used intensively.
Jack
+2  A: 

Use IntelliJ IDEA with its GUI designer. Makes GridBagLayout easy.

http://madbean.com/anim/totallygridbag/

glebm
Although GridBagLayout has a piss poor interface, he flash thing just demonstrates that bad code is bad code.
Tom Hawtin - tackline
+1 and Thanks for the link. I appreciate the intent, but I didn't even find it funny enough to provoke a smirk. Maybe GBL and humor aren't compatible.
Carl Smotricz
+4  A: 

GroupLayout is pretty decent. It was originally intended for use by GUI Builder applications but I've found it to be very straight forward to code by hand too.

ninesided
I've discovered "pretty decent" to be an understatement! It's VERY versatile and can do a few tricks GridBagLayout can't. Recommended!
Carl Smotricz
+2  A: 

GridBagLayout. Does pretty much all that you need (kind of) and it's in the Java library. Admittedly it does need some help, and the API is terrible.

GroupLayout makes a real mess of your layout code. Okay, so most people's GUI code is a big ball of mud. But your's does not have to be! Perhaps a nice interface could be put onto this layout manager, but I suspect it might have to be cloned-and-owned.

I am not in favour of introducing external dependencies unless they are really necessary. Also a lot of the third-party layout managers use strings of data, which have all the usual issues.

Tom Hawtin - tackline
Yeah... I seem to be the only person in my team who understands GridBagLayout. It's still painful, though. I'm happy when I can average only 4 lines of code per component, but that's only for boring layouts. There's gotta be a better way!
Carl Smotricz
Hehe, mastering `GridBagLayout` gives you instant respect, almost everywhere. ;)
Bombe
Bombe: Back in JDK1.02 days it was practically the first thing you did. Kids of today!
Tom Hawtin - tackline
+2  A: 

FormLayout, part of the JGoodies Forms package has been a workhorse for me. It's not perfectly flexible in that it works hard to make your design look good. I've used it for several years on dozens of projects and it keeps on producing good looking output quickly.

You specify your layout in human-readable text, then add the components. Done.

clartaq
+1 and thank you. I'll be sure to take a look!
Carl Smotricz
+2  A: 

I usually use border layout with gridlayout, first i design ui on paper prototype like ;

alt text

After that we can split screen to gridlayout on borderlayout. In this picture we see NORTH, CENTER, SOUTH part (BorderLayout elements) and every part's layout can be gridlayout or BorderLayout, it depends on you. Same Layouts can use one within the other.

javaloper
Gah borders. Top tip how to make your UI noisy
willcodejavaforfood
+2  A: 

All of them, in combination. That's the whole point. Each layout manager fulfills different requirements, and by nesting panels with different layout managers, you can achieve almost anything.

The "do everything in a single panel" layout managers like GridBagLayout and GroupLayout (and lots of 3rd party ones) have their place, mainly when you need components in different parts of the layout to align, but with a large layout, they generally result in a huge, hard-to-handle mess.

Michael Borgwardt
+2  A: 

It depends on what kind of GUI you are creating. You might use just one or two of the simple layouts, or you might need to reach for a more advanced layout. My overall layout manager use would probably break down to something like this, although it would vary based on the project:

  • 65% GridBagLayout - The one layout that will get it done, no matter what you need to do.
  • 15% Box/BoxLayout - Great for quickly & easily sticking a couple components together.
  • 12% BorderLayout - Good for attaching a button panel or info panel to a content panel. I almost always use it to add content to a JFrame.
  • 3% FlowLayout - Useful for button panels, but not much else.
  • 3% CardLayout - Mostly useful in programs that display different content panels for different operational modes.
  • 2% Other layouts - It's very rare that I need anything else, but occasionally one of the other layouts comes in handy.

Once you get the hang of GridBagLayout, it's not that bad to write initially, but it's still not pretty to work with, or to debug later on. I tried MiGLayout for something recently and was disappointed to find that the MiGLayout actually ended up being more complicated to use than the GridBagLayout in that particular case.

Some people try to avoid GridBagLayout like the plague; but the truth is, there are some things that no combination of simple layouts will be able to handle. It's fine to split a GUI into panels for different logical sections, but I think if you're creating a whole bunch of unnecessary extra nested panels just for the purpose of positioning components, you clearly need to learn how to use a GridBagLayout (or other similarly advanced layout, like MiGLayout). You might get your GUI to look okay with a nasty mess of nested BorderLayouts and GridLayouts and BoxLayouts, but as soon as someone starts resizing your application windows and dialogs to be either smaller or larger than you originally designed them, your GUI will probably look horrible and your customers will start to form a negative opinion about your product since you couldn't get such a simple thing right.

rob
+1, Thank you for a detailed and thoughtful answer! I agree about GBL but have recently come to love GroupLayout, which does a couple of things GBL can't. Recommended! Like you, I found MiGLayout *almost* great.
Carl Smotricz