Intro
I create my forms using JFormDesigner (don't want to hack all those swing components manually). Spring RCP does not take gui builders into account (- yet, supposed to be supported in the 0.2 release). For "normal" fields this is no problem, you just do:
bindingFactory.bindControl(machineEditorPanel.getPricelistRemarksTextField(),
"priceListRemarks");
For comboboxes however there is no direct support. After taking a close look at how the code-only formbuilder works I came up with the following solution.
Solution
I extended the SwingBindingFactory.
public class ExtendedBindingFactory extends SwingBindingFactory { /** * @param arg0 */ public ExtendedBindingFactory(FormModel formModel) { super(formModel); } /** * @param comboBox * @param formPropertyPath * @param items * @param renderPropertyPath */ public void bindComboBox(JComboBox comboBox, String formPropertyPath, Collection items, String renderPropertyPath) { Map context = new HashMap(4); context.put(ComboBoxBinder.SELECTABLE_ITEMS_HOLDER_KEY, new ValueHolder(items)); context.put(ComboBoxBinder.RENDERER_KEY, new BeanPropertyValueListRenderer(renderPropertyPath)); context.put(ComboBoxBinder.EDITOR_KEY, new BeanPropertyValueComboBoxEditor(renderPropertyPath)); context.put(ComboBoxBinder.COMPARATOR_KEY, new PropertyComparator(renderPropertyPath, true, false)); this.bindControl(comboBox, formPropertyPath, context); } }
And now binding comboxes is really easy
:
bindingFactory.bindComboBox(machineEditorPanel.getStatusComboBox(),
"status", machineDao.findAllMachineStatuses(), "name");