Trying to build a GUI application in Java/Swing. I’m mainly used to “painting” GUIs on the Windows side with tools like VB (or to be more precise, Gupta SQLWindows… wonder how many people know what that is ;-)).
I can’t find an equivalent of a Group Box in Swing…
With a group box, you have a square box (usually with a title) around a couple of related widgets. One example is a group box around a few radio buttons (with the title explaining what the radio buttons are about, e.g. Group Box entitled “Sex” with “Male” and “Female” radio buttons).
I’ve searched around a bit… the only way I found was to add a sub-pane, set the border on the sub-pane and then add all the widgets in the “group” to the sub-pane. Is there a more elegant way to do that?
Perhaps you could explain what a group box is.
I think he means the control group you see in many dialog boxes, where you have a square around a bunch of widgets such as radio buttons, for example.
Others have already commetned about JPanel and using a TitledBorder, that’s fine.
However, when playing with Swing LayoutManagers, you may find it annoying that components in different JPanels cannot align correctly (each panel has its own LayoutManager).
For this reason, it is a good practice (check “JGoodies” on the web for more details) in Swing GUIs to NOT use TitledBorders but rather separate groups of components in a JPanel by a JLabel followed by a horizontal JSeparator.
Ref. “First Aid for Swing“
Here’s a quote from the JRadioButton javadocs since you brought up radio buttons.
Not AFAIK, at least not with standard swing widgets.
In VB you have a group widget, which is essentially a panel + border.
In Swing you have a JPanel which is the container widget, and you create and set a border object on it only if you need one. One can argue that in a way that is more elegant since you don’t pay for something you don’t use (e.g., border)
I’m responding based on the Uri’s comment which explaind what the OP meant by
Group Box
:As far as I know, every
JComponent
can set a border for itself, so you don’t need a second panel.Create a JPanel, and add your radiobuttons to it. Don’t forget to set the layout of the JPanel to something appropriate.
Then call
panel.setBorder(BorderFactory.createTitledBorder(name));
A Group box is just a set of ‘logically grouped widgets’.
This in the swing world is a
JPanel
.Add your widgets to a
JPanel
.Set its border type to ‘Titled Border’ and give the title, same as the name of the VB6 ‘frame’.
Voila. You have your group box.
As David Koelle mentioned about setting up border through java code, you can also achieve similar result in designer mode.