Bug 112045 [CellEditors] ComboBoxCellEditor doesn't set items if creation of control is deferred
If the ComboBoxCellEditor is instantiated without creating the control the items are not set on the ComboBoxCellEditor on call to createControl(Composite parent). The following snippet displays the problem. public class ComboEditor { void run() { Display display = new Display(); Shell shell = new Shell(display); String[] items = new String[]{"Item 1", "Item 2", "Item 3"}; ComboBoxCellEditor editor = new ComboBoxCellEditor(); editor.setItems(items); editor.create(shell); //Uncomment to set items. // editor.setItems(items); editor.activate(); editor.getControl().setVisible(true); editor.getControl().setBounds(0, 0, 100, 20); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } public static void main(String[] args) { new ComboEditor().run(); } }
bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ComboBoxCellEditor.java
setErrorMessage(MessageFormat.format(getErrorMessage(),
	                    new Object[] { comboBox.getText() }));
        	}
        }
        fireApplyEditorValue();
        deactivate();
    }
    /*
     *  (non-Javadoc)
     * @see org.eclipse.jface.viewers.CellEditor#focusLost()
     */
    protected void focusLost() {
        if (isActivated()) {
            applyEditorValueAndDeactivate();
        }
    }
    /*
     *  (non-Javadoc)
     * @see org.eclipse.jface.viewers.CellEditor#keyReleaseOccured(org.eclipse.swt.events.KeyEvent)
     */
    protected void keyReleaseOccured(KeyEvent keyEvent) {
        if (keyEvent.character == '\u001b') { 
            fireCancelEditor();
        } else if (keyEvent.character == '\t') { 
            applyEditorValueAndDeactivate();
        }
    }
}