public boolean processAction(MiiAction action) { // MiDebug.println(this + " proecssAction: " + action); if (action.hasActionType(Mi_ITEM_SELECTED_ACTION)) { textField.setValue(list.getSelectedItem()); dispatchAction(Mi_VALUE_CHANGED_ACTION); menu.popdown(); } else if (action.hasActionType(Mi_LOST_KEYBOARD_FOCUS_ACTION | Mi_REQUEST_ACTION_PHASE)) { if (restrictingValuesToThoseInList) { String value = textField.getValue(); if ((list.getIndexOfItem(value) == -1) && (list.getNumberOfItems() > 0)) { if (restrictionWarnsOnly) { dispatchAction(Mi_INVALID_VALUE_ACTION); } else { action.veto(); dispatchAction(Mi_INVALID_VALUE_ACTION); if (MiDebug.debug && MiDebug.isTracing(null, MiDebug.TRACE_KEYBOARD_FOCUS_DISPATCHING)) { MiDebug.println( MiDebug.getMicaClassName(this) + ": Rejecting loss of keyboard focus because " + "isRestrictingValuesToThoseInList() == true."); } return (true); } } } dispatchAction(Mi_VALUE_CHANGED_ACTION); } else if ((action.hasActionType(Mi_LOST_KEYBOARD_FOCUS_ACTION)) || (action.hasActionType(Mi_ENTER_KEY_ACTION))) { dispatchAction(Mi_VALUE_CHANGED_ACTION); if (!list.getContents().contains(textField.getValue())) list.getSelectionManager().deSelectAll(); else list.setValue(textField.getValue()); } else if (action.hasActionType(Mi_TEXT_CHANGE_ACTION)) { dispatchAction(Mi_TEXT_CHANGE_ACTION); } else if (action.hasActionType(Mi_VISIBLE_ACTION)) { MiSize prefSize = menu.getPreferredSize(new MiSize()); if (prefSize.getWidth() < getWidth() - getMargins(new MiMargins()).getWidth()) { prefSize.setWidth(getWidth() - getMargins(new MiMargins()).getWidth()); menu.setPreferredSize(prefSize); menu.setSize(prefSize); menu.validateLayout(); } } return (true); }