/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package jada.ngeditor.guiviews.editors; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.AbstractCellEditor; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JTable; import javax.swing.ListCellRenderer; import javax.swing.table.TableCellEditor; /** * * @author tukano.pgcom */ public class JComboEditor extends AbstractCellEditor implements TableCellEditor, ActionListener { private final DefaultComboBoxModel model = new DefaultComboBoxModel(); private final JComboBox box = new JComboBox(model); private Object editorValue; private Object tableValue; public JComboEditor(Object...defaultValues) { box.setEditable(false); for (int i = 0; i < defaultValues.length; i++) { Object object = defaultValues[i]; model.addElement(object); } box.addActionListener(this); } public JComboEditor setBoxRenderer(ListCellRenderer renderer) { box.setRenderer(renderer); return this; } public Object getCellEditorValue() { return editorValue; } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { editorValue = tableValue = value; model.setSelectedItem(value); return box; } public void actionPerformed(ActionEvent e) { editorValue = model.getSelectedItem(); fireEditingStopped(); } @Override public void cancelCellEditing() { editorValue = tableValue; fireEditingCanceled(); } @Override public boolean stopCellEditing() { editorValue = box.getSelectedItem(); fireEditingStopped(); return true; } }