Hi,
I am working on creating a jradiobutton group using JTable. Here is a brief definition of the problem.
My program gives an output like this:-
Questions Answers
1 radiobtn1 radiobtn2 radiobtn3
2 radiobtn1 radiobtn2 radiobtn3
3 radiobtn1 radiobtn2 radiobtn3
I am able to set horizontal control that only 1 radio button can be selected but how do I control vertically ?
As per my requirement I should allow only 1 radiobutton to be selected in a field. Even though horizontally I am doing that.
In short I mean both in rows and columns only 1 radiobutton should be selected.
Below is my code. What changes should I do ?
Also I wanted to use checkbox in for the 3rd button instead of radiobutton how can I do do that ? Since I am making a group of buttons here. Is it possible to do that ?
I mean somthing like this :-
Questions Answers
1 radiobtn1 radiobtn2 checkbox3
2 radiobtn1 radiobtn2 checkbox3
3 radiobtn1 radiobtn2 checkbox3
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.JRadioButton;
import javax.swing.JButton;
public class JRadioButtonTableExample2 extends javax.swing.JFrame {
public JRadioButtonTableExample2() {
super("JRadioButtonTable Example");
DefaultTableModel dm = new DefaultTableModel(new Object[][]{
{new String("Andrew")},
{new String("Bolon")},
{new String("Peter")},
{new String("Mathew")},
{new String("Austin")}},
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)));
JButton myButton = new JButton("MyQuestion");
setContentPane(new JScrollPane(table));
}
// Cell base
class RadioButtonPanel extends JPanel {
private JRadioButton[] buttons;
private JRadioButton noSelectionButton;
RadioButtonPanel(String[] str) {
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
buttons = new JRadioButton[str.length];
ButtonGroup group = new ButtonGroup();
noSelectionButton = new JRadioButton();
group.add(noSelectionButton);
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JRadioButton(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 JRadioButton[] 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) {
JRadioButtonTableExample2 frame = new JRadioButtonTableExample2();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.setSize(230, 140);
frame.setVisible(true);
}
}
Thanks