import javax.swing.JComboBox; import java.util.List; import javax.swing.DefaultComboBoxModel; import java.awt.Dimension; import javax.swing.table.TableCellEditor; import java.util.EventObject; import javax.swing.event.CellEditorListener; import java.awt.Component; import javax.swing.JTable; import javax.swing.event.EventListenerList; import javax.swing.event.ChangeEvent; /** */ /** * * <p>Title: </p> * * <p>Description: </p> * * <p>Copyright: Copyright (c) 2006</p> * * <p>Company: wri</p> * * @author tang08 * @version 1.0 */ public class ComboBoxCellEditor extends JComboBox implements TableCellEditor ... { protected EventListenerList listenerList = new EventListenerList(); protected ChangeEvent changeEvent = new ChangeEvent(this); private DefaultComboBoxModel model = new DefaultComboBoxModel(); public ComboBoxCellEditor() ...{ super(); this.setPreferredSize(new Dimension(80, 25)); this.setModel(model); } /** *//** * 设置初始值 * @param value Object */ public void setValue(Object value) ...{ if (model.getSize() > 0) ...{ model.removeAllElements(); } if (value != null) ...{ if (value instanceof String) ...{ model.addElement(value); return; } List list = (List) value; for (int i = 0; i < list.size(); i++) ...{ model.addElement(list.get(i)); } this.setSelectedIndex(0); } } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) ...{ if (value == null) ...{ String select = (String)this.getSelectedItem(); setSelectedItem(select); return this; } setSelectedItem(value); return this; } /** *//** * 获得设置数据值 * @return Object */ public Object getValue() ...{ return this.getSelectedItem(); } public void setEnable(boolean enable) ...{ super.setEnabled(enable); } public Object getCellEditorValue() ...{ return (String)this.getSelectedItem(); } public boolean isCellEditable(EventObject anEvent) ...{ return true; } public boolean shouldSelectCell(EventObject anEvent) ...{ return true; } public boolean stopCellEditing() ...{ fireEditingStopped(); return true; } public void cancelCellEditing() ...{ fireEditingCanceled(); } public void addCellEditorListener(CellEditorListener l) ...{ listenerList.add(CellEditorListener.class, l); } public void removeCellEditorListener(CellEditorListener l) ...{ listenerList.remove(CellEditorListener.class, l); } /** *//** * fireEditingStopped */ protected void fireEditingStopped() ...{ CellEditorListener listener; Object[] listeners = listenerList.getListenerList(); for (int i = 0; i < listeners.length; i++) ...{ if (listeners[i] == CellEditorListener.class) ...{ listener = (CellEditorListener) listeners[i + 1]; listener.editingStopped(changeEvent); } } } protected void fireEditingCanceled() ...{ CellEditorListener listener; Object[] listeners = listenerList.getListenerList(); for (int i = 0; i < listeners.length; i++) ...{ if (listeners[i] == CellEditorListener.class) ...{ listener = (CellEditorListener) listeners[i + 1]; listener.editingCanceled(changeEvent); } } }}