package jp.gr.java_conf.skrb.game.trivia.mclient; import java.awt.Component; import javax.swing.AbstractCellEditor; import javax.swing.JComponent; import javax.swing.JTable; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableCellEditor; import javax.swing.table.TableModel; public class AttributeTable extends JTable { private AttributeRenderer attributeRenderer; private AttributeEditor attributeEditor; public AttributeTable(TableModel model) { super(model); setCellSelectionEnabled(true); attributeRenderer = new AttributeRenderer(); attributeEditor = new AttributeEditor(); } public TableCellRenderer getCellRenderer(int row, int col) { Object obj = getValueAt(row, col); // System.out.println("Renderer obj[" + row + "][" + col + "] = " + obj); if (obj instanceof JComponent) { return attributeRenderer; } else { return super.getCellRenderer(row, col); } } public TableCellEditor getCellEditor(int row, int col) { Object obj = getValueAt(row, col); // System.out.println("Editor obj[" + row + "][" + col + "] = " + obj); if (obj instanceof JComponent) { return attributeEditor; } else { return super.getCellEditor(row, col); } } class AttributeRenderer implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { return (Component)value; } } class AttributeEditor extends AbstractCellEditor implements TableCellEditor { private Component comp; public Object getCellEditorValue() { return comp; } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int col) { comp = (Component)value; return comp; } } }