aspose file tools*
The moose likes Swing / AWT / SWT and the fly likes JCheckBox Allowable Selections Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Soft Skills this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark "JCheckBox Allowable Selections" Watch "JCheckBox Allowable Selections" New topic
Author

JCheckBox Allowable Selections

Joe Pawlak
Greenhorn

Joined: Dec 02, 2003
Posts: 23
I know there is a way to only allow one JCheckBox to be selected, but is there a way to allow only 2 to be selected?
Thanks.
Joe Pawlak
Greenhorn

Joined: Dec 02, 2003
Posts: 23
Also, besides just being able to select 2, they should still be able to select 1 instead of 2.
Joe Pawlak
Greenhorn

Joined: Dec 02, 2003
Posts: 23
Better yet, I have this code that will do what I need it to once I change the code a bit. But the problem is, the code allows the user to select as many radio buttons in a column as (s)he wants. But what I need is the user to select one option from each column.
I tried to change the code, but it didn't quite work. So if anyone could help it would be greatly appreciated, thanks.
CODE:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ScrollDemo extends JFrame {
JScrollPane scrollpane;
public ScrollDemo() {
super("JScrollPane Demonstration");
setSize(300, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
init();
setVisible(true);
}
public void init() {
JRadioButton form[][] = new JRadioButton[13][3];
String counts[] = { "", "1", "2" };
String categories[] = { "Household", "Office", "Extended Family",
"Company (US)", "Company (World)", "Team",
"Will", "Birthday Card List", "High School",
"Country", "Continent", "Planet" };
JPanel p = new JPanel();
p.setSize(600, 400);
p.setLayout(new GridLayout(13, 3, 10, 0));
for (int row = 0; row < 13; row++) {
ButtonGroup bg = new ButtonGroup();
for (int col = 0; col < 3; col++) {
if (row == 0) {
p.add(new JLabel(counts[col]));
}
else {
if (col == 0) {
p.add(new JLabel(categories[row - 1]));
}
else {
form[row - 1][col - 1] = new JRadioButton();
bg.add(form[row -1][col - 1]);
p.add(form[row -1][col - 1]);
}
}
}
}
scrollpane = new JScrollPane(p);
getContentPane().add(scrollpane, BorderLayout.CENTER);
}
public static void main(String args[]) {
new ScrollDemo();
}
}
Jose Botella
Ranch Hand

Joined: Jul 03, 2001
Posts: 2120
Do you want the buttons in the same column have an exclusive selection? Just place them in the same ButtonGroup.


SCJP2. Please Indent your code using UBB Code
Joe Pawlak
Greenhorn

Joined: Dec 02, 2003
Posts: 23
I tried making two separate arrays of JRadioButtons and then putting those into ButtonGroups, but that is not working.
Craig Wood
Ranch Hand

Joined: Jan 14, 2004
Posts: 1535
How about this?
Joe Pawlak
Greenhorn

Joined: Dec 02, 2003
Posts: 23
Craig, that works, but is there any way to decrease the distance between the two columns of the Radio Buttons? I tried making the panel smaller and took out the hgaps and vgaps, but those didn't seem to work.
Craig Wood
Ranch Hand

Joined: Jan 14, 2004
Posts: 1535
Yes. Here's a GridBag layout. You can use the insets to control spacing
gbc.insets = new Insets(2,2,2,2);
among the components. [top, left, bottom, right]
Joe Pawlak
Greenhorn

Joined: Dec 02, 2003
Posts: 23
So far I have this:

But the columns of Radio Buttons are too far apart, and are causing the questions to be cut off with an ...
The JPanel can be a little wider, but I don't want to make it as wide as it has to be right now in order for the entire question to be shown.
Thanks.
Craig Wood
Ranch Hand

Joined: Jan 14, 2004
Posts: 1535
Hi Joe,
There is nothing you can do about the spacing when you use GridLayout. GridLayout ignores the preferred size of the components it is given to lay out. Instead it tries to make all the components the same size to just fill the space available. The column width for each radio button will always be the same as the column width for the labels. It's just a big grid.

Using other layout managers is the key to freedom here. Here's another run at it with GridBagLayout. This one expands during resize where the earlier one didn't. This is easy and elegant.

If this is unacceptable you can explore other options. How about three vertical panels laid out side-by-side with FlowLayout in a panel that goes into the "Center" of the content pane, each of the three panels with a GridLayout and holding the components of one column (labels, button, button)?

I won't pester you about GridBag anymore but will be glad to help if you ask.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: JCheckBox Allowable Selections