/** * Sets internal model for this combo. If comboModelField is set, this method is useless (combo * model is automatically read from YModel). * * @param data the collection of POJOs */ public void setComboModel(Collection data) { this.originalComboModel = data; int i = 0; if (addEmpty) { items = new YListItem[data.size() + 1]; items[0] = emptyItem; i = 1; } else { items = new YListItem[data.size()]; } Iterator it = data.iterator(); while (it.hasNext()) { YListItem comboItem = new YListItem(); if (formatter != null) { comboItem.setFormatter(formatter); } comboItem.setItemModel(it.next()); items[i++] = comboItem; } if (sort) { Arrays.sort(items, YCoreToolkit.LEXICAL_COMPARATOR); } super.setModel(new DefaultComboBoxModel(items)); }
/** * Gets selected item for view model. * * @see #setModelField(String) * @return the value or null if no item is selected */ public Object getModelValue() { if (!forceListItem) { return this.editorField.getText(); } else { Object item = super.getSelectedItem(); if (item == null || item == emptyItem || !(item instanceof YListItem)) { return null; } else { YListItem comboItem = (YListItem) super.getSelectedItem(); if (modelField == null) { return comboItem.getItemModel(); } else { return YCoreToolkit.getBeanValue(comboItem.getItemModel(), modelField); } } } }
/** * Sets model value from view model. Finds matching item from the combo box and sets it selected. * * @param obj the view model value * @see #setModelField(String) */ public void setModelValue(Object obj) throws YException { this.settingModelValue = true; try { if (obj == null) { this.setSelectedIndex(-1); } else { if (!forceListItem) { this.editorField.setText(obj.toString()); } else { // searching corresponding item in list: if (items == null) { throw new YException("Combo model for YComboBox is not set."); } else { for (int i = 0; i < this.items.length; i++) { YListItem item = (YListItem) items[i]; if (!(item == emptyItem)) { if (this.modelField == null) { if (obj.equals(item.getItemModel())) { this.setSelectedItem(item); } } else { Object value = YCoreToolkit.getBeanValue(item.getItemModel(), modelField); if (obj.equals(value)) { this.setSelectedItem(item); } } } } } } } if (forceListItem && getSelectedItem() != null) { // this fixes caret position in the editor... this.editorField.setText(getSelectedItem().toString()); this.editorField.setCaretPosition(0); } } finally { settingModelValue = false; } }