RadioPanelCell.java

package edu.udel.cis.vsl.civl.gui.common;

import java.awt.Component;

import javax.swing.AbstractCellEditor;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;

public class RadioPanelCell extends AbstractCellEditor implements TableCellEditor, TableCellRenderer{
	private static final long serialVersionUID = 1L;
	
	private JRadioButton rb_true;
	private JRadioButton rb_false;
	private ButtonGroup group;
	private JPanel radioPanel;
	private boolean selectedVal;
	
	public RadioPanelCell() {
		radioPanel = new JPanel();
		rb_true = new JRadioButton("true", true);
		rb_false = new JRadioButton("false", false);
		group = new ButtonGroup();		
		
		group.add(rb_true);
		group.add(rb_false);

		radioPanel.add(rb_true);
		radioPanel.add(rb_false);
	}
	
	public void updateData(Boolean selectedVal, boolean isSelected, JTable table) {
		this.selectedVal = selectedVal;

		if (isSelected) {
			radioPanel.setBackground(table.getSelectionBackground());
			
		} else {
			radioPanel.setBackground(table.getSelectionForeground());
		}
		
		if (selectedVal)
			rb_true.setSelected(true);
		else if (!selectedVal)
			rb_false.setSelected(true);
	}
	
	@Override
	public Component getTableCellEditorComponent(JTable table, Object value,
			boolean isSelected, int row, int column) {
		Boolean selectedVal = (Boolean) value;
		updateData(selectedVal, true, table);
		
		return radioPanel;
	}
	
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value,
			boolean isSelected, boolean hasFocus, int row, int column) {
		Boolean selectedVal = (Boolean) value;

		updateData(selectedVal, isSelected, table);
		
		return radioPanel;
	}
	
	@Override
	public Object getCellEditorValue() {
		return selectedVal;
	}

	
}