Hi,
I am trying to create a button group which can give me both Jcheckboxes as well as Jbuttons. The problem is that I am creating a button group and not able to fit the checkbox criteria into it. Actually I want to create 2 radiobuttons followed by one checkbox
I mean something like like:-
No Buttons
1 jbutton1 jbutton2 jcheckbox1
2 jbutton1 jbutton2 jcheckbox1
3 jbutton1 jbutton2 jcheckbox1
Here is how I am creating my button group:-
private JCheckBox[] buttons;
private JRadioButton noSelectionButton;
RadioButtonPanel(String[] str) {
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
buttons = new JCheckBox[str.length];
ButtonGroup group = new ButtonGroup();
noSelectionButton = new JRadioButton();
group.add(noSelectionButton);
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JCheckBox(str[i]);
buttons[i].setFocusPainted(false);
add(buttons[i]);
group.add(buttons[i]);
}
}
I was trying to follow this example to fit my requirement but in this case I need to use CheckboxGroup whereas I am using ButtonGroup and since I am filling my buttongroup like this
group.add(buttons[i])
It is creating me problems when I declare CheckboxGroup instead of ButtonGroup.
Here is the example I am talking about :-
http://www.apl.jhu.edu/~hall/CWP-Chapter13/CWP-Chapter13.5.html
Here is my full code
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.JRadioButton;
import javax.swing.JButton;
public class MixedButtons extends javax.swing.JFrame {
public MixedButtons() {
super("JRadioButtonTable Example");
DefaultTableModel dm = new DefaultTableModel(new Object[][]{
{new String("one")},
{new String("two")},
{new String("three")},
{new String("four")},
{new String("five")}},
new Object[]{"Question", "Answer"});
JTable table = new JTable(dm);
String[] answer = {"A", "B", "C"};
table.getColumn("Answer").setCellRenderer(new RadioButtonRenderer(answer));
table.getColumn("Answer").setCellEditor(new RadioButtonEditor(new RadioButtonPanel(answer)));
setContentPane(new JScrollPane(table));
}
// Cell base
class RadioButtonPanel extends JPanel {
private JCheckBox[] buttons;
private JRadioButton noSelectionButton;
RadioButtonPanel(String[] str) {
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
buttons = new JCheckBox[str.length];
ButtonGroup group = new ButtonGroup();
noSelectionButton = new JRadioButton();
group.add(noSelectionButton);
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JCheckBox(str[i]);
buttons[i].setFocusPainted(false);
add(buttons[i]);
group.add(buttons[i]);
}
}
public void addActionListener(ActionListener anActionListener) {
for (int i = 0; i < buttons.length; i++) {
buttons[i].addActionListener(anActionListener);
}
}
public void removeActionListener(ActionListener anActionListener) {
for (int i = 0; i < buttons.length; i++) {
buttons[i].removeActionListener(anActionListener);
}
}
public void setSelectedIndex(int index) {
if (index < 0 || index >= buttons.length) {
noSelectionButton.setSelected(true);
return;
}
for (int i = 0; i < buttons.length; i++) {
if (i == index) {
buttons[i].setSelected(true);
return;
}
}
}
public int getSelectedIndex() {
for (int i = 0; i < buttons.length; i++) {
if (buttons[i].isSelected()) {
return i;
}
}
return -1;
}
public JCheckBox[] getButtons() {
return buttons;
}
}
class RadioButtonRenderer extends RadioButtonPanel implements TableCellRenderer {
RadioButtonRenderer(String[] strs) {
super(strs);
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
if (value instanceof Integer) {
setSelectedIndex(((Integer)value).intValue());
}
return this;
}
}
class RadioButtonEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {
private RadioButtonPanel theRadioButtonPanel;
public RadioButtonEditor(RadioButtonPanel aRadioButtonPanel) {
theRadioButtonPanel = aRadioButtonPanel;
theRadioButtonPanel.addActionListener(this);
}
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
if (value instanceof Integer) {
theRadioButtonPanel.setSelectedIndex(((Integer) value).intValue());
}
return theRadioButtonPanel;
}
public Object getCellEditorValue() {
return new Integer(theRadioButtonPanel.getSelectedIndex());
}
public void actionPerformed(ActionEvent e) {
fireEditingStopped();
}
}
public static void main(String[] args) {
MixedButtons frame = new MixedButtons();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.setSize(230, 140);
frame.setVisible(true);
}
}
Thanks