|
Java™ by example!
|
|
|
How do I have a JRadioButton cell in a JTable?
Courtesy of Nobuo Tamemasa (http://www2.gol.com/users/tame/swing/examples/JTableExamples1.html)
 JRadioButtonTableExample.java:
 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; import javax.swing.event.*; class RadioButtonRenderer implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value==null) return null; return (Component)value; } } class RadioButtonEditor extends DefaultCellEditor implements ItemListener { private JRadioButton button; public RadioButtonEditor(JCheckBox checkBox) { super(checkBox); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if (value==null) return null; button = (JRadioButton)value; button.addItemListener(this); return (Component)value; } public Object getCellEditorValue() { button.removeItemListener(this); return button; } public void itemStateChanged(ItemEvent e) { super.fireEditingStopped(); } } public class JRadioButtonTableExample extends JFrame { public JRadioButtonTableExample(){ super( "JRadioButtonTable Example" ); UIDefaults ui = UIManager.getLookAndFeel().getDefaults(); UIManager.put("RadioButton.focus", ui.getColor("control")); DefaultTableModel dm = new DefaultTableModel(); dm.setDataVector( new Object[][]{ {"Group 1",new JRadioButton("A")}, {"Group 1",new JRadioButton("B")}, {"Group 1",new JRadioButton("C")}, {"Group 2",new JRadioButton("a")}, {"Group 2",new JRadioButton("b")}}, new Object[]{"String","JRadioButton"}); JTable table = new JTable(dm) { public void tableChanged(TableModelEvent e) { super.tableChanged(e); repaint(); } }; ButtonGroup group1 = new ButtonGroup(); group1.add((JRadioButton)dm.getValueAt(0,1)); group1.add((JRadioButton)dm.getValueAt(1,1)); group1.add((JRadioButton)dm.getValueAt(2,1)); ButtonGroup group2 = new ButtonGroup(); group2.add((JRadioButton)dm.getValueAt(3,1)); group2.add((JRadioButton)dm.getValueAt(4,1)); table.getColumn("JRadioButton").setCellRenderer(new RadioButtonRenderer()); table.getColumn("JRadioButton").setCellEditor(new RadioButtonEditor(new JCheckBox())); JScrollPane scroll = new JScrollPane(table); getContentPane().add( scroll ); setSize( 200, 140 ); setVisible(true); } public static void main(String[] args) { JRadioButtonTableExample frame = new JRadioButtonTableExample(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } }
|
 JRadioButtonTableExample2.java:
 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; import javax.swing.event.*;
/** * @version 1.2 08/13/99 */ public class JRadioButtonTableExample2 extends JFrame { public JRadioButtonTableExample2(){ super( "JRadioButtonTable Example" ); DefaultTableModel dm = new DefaultTableModel(); dm.setDataVector( new Object[][]{ {"1",new Integer(-1)}, {"2",new Integer(-1)}, {"3",new Integer(0)}, {"4",new Integer(1)}, {"5",new Integer(2)}}, 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 JCheckBox(), new RadioButtonPanel(answer)) ); JScrollPane scroll = new JScrollPane(table); getContentPane().add( scroll ); } // Cell base class RadioButtonPanel extends JPanel { JRadioButton[] buttons; RadioButtonPanel(String[] str) { setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); buttons = new JRadioButton[str.length]; for (int i=0; i<buttons.length; i++) { buttons[i] = new JRadioButton(str[i]); buttons[i].setFocusPainted(false); add(buttons[i]); } } public void setSelectedIndex(int index) { for (int i=0;i<buttons.length;i++) { buttons[i].setSelected(i == index); } } 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 DefaultCellEditor implements ItemListener { RadioButtonPanel panel; public RadioButtonEditor(JCheckBox checkBox,RadioButtonPanel panel) { super(checkBox); this.panel = panel; ButtonGroup buttonGroup = new ButtonGroup(); JRadioButton[] buttons = panel.getButtons(); for (int i=0; i<buttons.length; i++) { buttonGroup.add(buttons[i]); buttons[i].addItemListener(this); } } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if (value instanceof Integer) { panel.setSelectedIndex(((Integer)value).intValue()); } return panel; } public Object getCellEditorValue() { return new Integer(panel.getSelectedIndex()); } public void itemStateChanged(ItemEvent e) { super.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); } }
|
Further Information
Author of answer:
Comments
Comments to this answer are only viewable by members. Login or become a member!
|
|
|
|
|