Code
class ComboCellEditor extends AbstractCellEditor implements TableCellEditor {
private final JComboBox combo = new JComboBox<>();
protected ComboCellEditor() {
super();
combo.setEditable(true);
combo.addActionListener(e -> {
fireEditingStopped();
});
}
@Override public Component getTableCellEditorComponent(
JTable table, Object value, boolean isSelected, int row, int column) {
if (value instanceof ComboBoxModel) {
@SuppressWarnings("unchecked")
ComboBoxModel m = (ComboBoxModel) value;
combo.setModel(m);
}
return combo;
}
@Override public Object getCellEditorValue() {
@SuppressWarnings("unchecked")
DefaultComboBoxModel m = (DefaultComboBoxModel) combo.getModel();
if (combo.isEditable()) {
String str = Objects.toString(combo.getEditor().getItem(), "");
if (!str.isEmpty() && m.getIndexOf(str) < 0) {
m.insertElementAt(str, 0);
combo.setSelectedIndex(0);
}
}
return m;
}
}
References