views:

6447

answers:

6

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 goup 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 "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?

+1  A: 

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)

Uri
A: 

I'm responding based on the Uri's comment . AFAIK , every JComponent can set a border for itself , so , you don't need a second panel .

Geo
I want to have a border around a number of JComponents .. also, having just one element in a group box is usually bad practice.
IronGoofy
You can add more than one component in a JPanel .
Geo
I know .. I probably misunderstood your answer.
IronGoofy
+10  A: 

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));

David
A: 

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.

Nivas
+3  A: 

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"

jfpoilpret
+1  A: 

Here's a quote from the JRadioButton javadocs since you brought up radio buttons.

An implementation of a radio button -- an item that can be selected or deselected, and which displays its state to the user. Used with a ButtonGroup object to create a group of buttons in which only one button at a time can be selected. (Create a ButtonGroup object and use its add method to include the JRadioButton objects in the group.)

Note: The ButtonGroup object is a logical grouping -- not a physical grouping. To create a button panel, you should still create a JPanel or similar container-object and add a Border to it to set it off from surrounding components.

Bill
Thanks, but as you correctly point out, my main intent was the "visual" aspect.
IronGoofy