Mega Code Archive

 
Categories / Java / Swing Components
 

Multiple Component Table

// Example from http://www.crionics.com/products/opensource/faq/swing_ex/SwingExamples.html /* (swing1.1beta3) */ import java.awt.Component; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.EventObject; import javax.swing.DefaultCellEditor; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.UIManager; import javax.swing.event.CellEditorListener; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; /**  * @version 1.0 11/09/98  */ class ComboString {   String str;   ComboString(String str) {     this.str = str;   }   public String toString() {     return str;   } } class MultiRenderer extends DefaultTableCellRenderer {   JCheckBox checkBox = new JCheckBox();   public Component getTableCellRendererComponent(JTable table, Object value,       boolean isSelected, boolean hasFocus, int row, int column) {     if (value instanceof Boolean) { // Boolean       checkBox.setSelected(((Boolean) value).booleanValue());       checkBox.setHorizontalAlignment(JLabel.CENTER);       return checkBox;     }     String str = (value == null) ? "" : value.toString();     return super.getTableCellRendererComponent(table, str, isSelected,         hasFocus, row, column);   } } class MultiEditor implements TableCellEditor {   private final static int COMBO = 0;   private final static int BOOLEAN = 1;   private final static int STRING = 2;   private final static int NUM_EDITOR = 3;   DefaultCellEditor[] cellEditors;   JComboBox comboBox;   int flg;   public MultiEditor() {     cellEditors = new DefaultCellEditor[NUM_EDITOR];     comboBox = new JComboBox();     comboBox.addItem("true");     comboBox.addItem("false");     cellEditors[COMBO] = new DefaultCellEditor(comboBox);     JCheckBox checkBox = new JCheckBox();     //checkBox.setOpaque( true );     checkBox.setHorizontalAlignment(JLabel.CENTER);     cellEditors[BOOLEAN] = new DefaultCellEditor(checkBox);     JTextField textField = new JTextField();     cellEditors[STRING] = new DefaultCellEditor(textField);     flg = NUM_EDITOR; // nobody   }   public Component getTableCellEditorComponent(JTable table, Object value,       boolean isSelected, int row, int column) {     if (value instanceof ComboString) { // ComboString       flg = COMBO;       String str = (value == null) ? "" : value.toString();       return cellEditors[COMBO].getTableCellEditorComponent(table, str,           isSelected, row, column);     } else if (value instanceof Boolean) { // Boolean       flg = BOOLEAN;       return cellEditors[BOOLEAN].getTableCellEditorComponent(table,           value, isSelected, row, column);     } else if (value instanceof String) { // String       flg = STRING;       return cellEditors[STRING].getTableCellEditorComponent(table,           value, isSelected, row, column);     }     return null;   }   public Object getCellEditorValue() {     switch (flg) {     case COMBO:       String str = (String) comboBox.getSelectedItem();       return new ComboString(str);     case BOOLEAN:     case STRING:       return cellEditors[flg].getCellEditorValue();     default:       return null;     }   }   public Component getComponent() {     return cellEditors[flg].getComponent();   }   public boolean stopCellEditing() {     return cellEditors[flg].stopCellEditing();   }   public void cancelCellEditing() {     cellEditors[flg].cancelCellEditing();   }   public boolean isCellEditable(EventObject anEvent) {     return cellEditors[flg].isCellEditable(anEvent);   }   public boolean shouldSelectCell(EventObject anEvent) {     return cellEditors[flg].shouldSelectCell(anEvent);   }   public void addCellEditorListener(CellEditorListener l) {     cellEditors[flg].addCellEditorListener(l);   }   public void removeCellEditorListener(CellEditorListener l) {     cellEditors[flg].removeCellEditorListener(l);   }   public void setClickCountToStart(int n) {     cellEditors[flg].setClickCountToStart(n);   }   public int getClickCountToStart() {     return cellEditors[flg].getClickCountToStart();   } } public class MultiComponentTable extends JFrame {   public MultiComponentTable() {     super("MultiComponent Table");     DefaultTableModel dm = new DefaultTableModel() {       public boolean isCellEditable(int row, int column) {         if (column == 0) {           return true;         }         return false;       }     };     dm.setDataVector(         new Object[][] {             { new ComboString("true"), "ComboString", "JLabel",                 "JComboBox" },             { new ComboString("false"), "ComboString", "JLabel",                 "JComboBox" },             { new Boolean(true), "Boolean", "JCheckBox",                 "JCheckBox" },             { new Boolean(false), "Boolean", "JCheckBox",                 "JCheckBox" },             { "true", "String", "JLabel", "JTextField" },             { "false", "String", "JLabel", "JTextField" } },         new Object[] { "Component", "Data", "Renderer", "Editor" });     JTable table = new JTable(dm);     table.getColumn("Component").setCellRenderer(new MultiRenderer());     table.getColumn("Component").setCellEditor(new MultiEditor());     JScrollPane scroll = new JScrollPane(table);     getContentPane().add(scroll);     setSize(400, 160);     setVisible(true);   }   public static void main(String[] args) {     MultiComponentTable frame = new MultiComponentTable();     frame.addWindowListener(new WindowAdapter() {       public void windowClosing(WindowEvent e) {         System.exit(0);       }     });   } }