/* (swing1.1.1) */ //package jp.gr.java_conf.tame.swing.examples; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; import jp.gr.java_conf.tame.swing.table.*; /** * @version 1.1 09/09/99 */ public class EachRowEditorExample extends JFrame { public EachRowEditorExample(){ super("EachRow Editor Example"); DefaultTableModel dm = new DefaultTableModel(); dm.setDataVector( new Object[][]{{"Name" ,"MyName"}, {"Gender","Male"}}, new Object[]{"Column1","Column2"}); JTable table = new JTable(dm); JComboBox comboBox = new JComboBox(); comboBox.addItem("Male"); comboBox.addItem("Female"); comboBox.addComponentListener(new ComponentAdapter() { public void componentShown(ComponentEvent e) { final JComponent c = (JComponent)e.getSource(); SwingUtilities.invokeLater(new Runnable() { public void run () { c.requestFocus(); System.out.println(c); if (c instanceof JComboBox) { System.out.println("a"); } } }); } }); EachRowEditor rowEditor = new EachRowEditor(table); rowEditor.setEditorAt(1, new DefaultCellEditor(comboBox)); table.getColumn("Column2").setCellEditor(rowEditor); JScrollPane scroll = new JScrollPane(table); getContentPane().add( scroll , BorderLayout.CENTER); setSize( 400, 100 ); setVisible(true); } public static void main(String[] args) { EachRowEditorExample frame = new EachRowEditorExample(); frame.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit(0); } }); } } ==============================================================
/* (swing1.1.1) jfc#91 */ package jp.gr.java_conf.tame.swing.table; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; import javax.swing.event.*; /** * each row TableCellEditor * * @version 1.1 09/09/99 * @author Nobuo Tamemasa */ public class EachRowEditor implements TableCellEditor { protected Hashtable editors; protected TableCellEditor editor, defaultEditor; JTable table; /** * Constructs a EachRowEditor. * create default editor * * @see TableCellEditor * @see DefaultCellEditor */ public EachRowEditor(JTable table) { this.table = table; editors = new Hashtable(); defaultEditor = new DefaultCellEditor(new JTextField()); } /** * @param row table row * @param editor table cell editor */ public void setEditorAt(int row, TableCellEditor editor) { editors.put(new Integer(row),editor); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { //editor = (TableCellEditor)editors.get(new Integer(row)); //if (editor == null) { // editor = defaultEditor; //} return editor.getTableCellEditorComponent(table, value, isSelected, row, column); } public Object getCellEditorValue() { return editor.getCellEditorValue(); } public boolean stopCellEditing() { return editor.stopCellEditing(); } public void cancelCellEditing() { editor.cancelCellEditing(); } public boolean isCellEditable(EventObject anEvent) { selectEditor((MouseEvent)anEvent); return editor.isCellEditable(anEvent); } public void addCellEditorListener(CellEditorListener l) { editor.addCellEditorListener(l); } public void removeCellEditorListener(CellEditorListener l) { editor.removeCellEditorListener(l); } public boolean shouldSelectCell(EventObject anEvent) { selectEditor((MouseEvent)anEvent); return editor.shouldSelectCell(anEvent); } protected void selectEditor(MouseEvent e) { int row; if (e == null) { row = table.getSelectionModel().getAnchorSelectionIndex(); } else { row = table.rowAtPoint(e.getPoint()); } editor = (TableCellEditor)editors.get(new Integer(row)); if (editor == null) { editor = defaultEditor; } } }