Hi.
I'm using the formbuilder to create a form. If the user selectes a value in one combobox, I want another combobox to alter it's content.
What I want is that if the user chooses "item1" in the first combobox, the second combobox will allow the user to choose between
"item1 - 1"
"item1 - 2"
If the user chooses "item2" in the first combobox, the second combobox will allow the user to choose between
"item2 - 1"
"item2 - 2"
It seems that the changes are not reflected in the gui.
This is my bean that is backing the form:
Then I create the form like this:Code:public class TestObject { private String selectedInList1; private String selectedInList2; private List<String> list1; private List<String> list2; private List<String> list2whenItem1Selected; private List<String> list2whenItem2Selected; private ExtendedPropertyChangeSupport changeSupport = new ExtendedPropertyChangeSupport( this); public TestObject() { list1 = new ArrayList<String>(); list1.add("item1"); list1.add("item2"); list2whenItem1Selected = new ArrayList<String>(); list2whenItem1Selected.add("item1 - 1"); list2whenItem1Selected.add("item1 - 2"); list2whenItem2Selected = new ArrayList<String>(); list2whenItem2Selected.add("item2 - 1"); list2whenItem2Selected.add("item2 - 2"); list2 = list2whenItem1Selected; selectedInList1 = list1.get(0); selectedInList2 = list2.get(0); } public String getSelectedInList1() { return selectedInList1; } public void setSelectedInList1(String selectedInList1) { String old = this.selectedInList1; this.selectedInList1 = selectedInList1; if( "item1".equals(selectedInList1) ) { setList2(list2whenItem1Selected); } else { setList2(list2whenItem2Selected); } setSelectedInList2(list2.get(0)); changeSupport.firePropertyChange("selectedInList1", old, selectedInList1); } public String getSelectedInList2() { return selectedInList2; } public void setSelectedInList2(String selectedInList2) { String old = this.selectedInList2; this.selectedInList2 = selectedInList2; changeSupport.firePropertyChange("selectedInList2", old, selectedInList2); } public List<String> getList1() { return list1; } public void setList1(List<String> list1) { List<String> old = this.list1; this.list1 = list1; changeSupport.firePropertyChange("list1", old, list1); } public List<String> getList2() { return list2; } public void setList2(List<String> list2) { List<String> old = this.list2; this.list2 = list2; changeSupport.firePropertyChange("list2", old, list2); } public void removePropertyChangeListener(PropertyChangeListener x) { changeSupport.removePropertyChangeListener(x); } public void addPropertyChangeListener(PropertyChangeListener x) { changeSupport.addPropertyChangeListener(x); } }
The output from the listner is:Code:public class TestForm extends AbstractForm { public TestForm(final TestObject testObject) { super(FormModelHelper.createFormModel(testObject, false, "testForm")); testObject.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { getControl().repaint(); System.out.println("testObject list2: " + testObject.getList2() + " form:" + getFormModel().getValueModel("list2").getValue()); } }); } @Override public JComponent createFormControl() { TableFormBuilder builder = new TableFormBuilder(getBindingFactory() ); { Map context = new HashMap(); context.put(ComboBoxBinder.SELECTABLE_ITEMS_KEY,getValueModel("list1")); ComboBoxBinder comboBoxBinder = new ComboBoxBinder(); Binding binding = comboBoxBinder.bind(getFormModel(), "selectedInList1", context); builder.add(binding); } { Map context = new HashMap(); context.put(ComboBoxBinder.SELECTABLE_ITEMS_KEY,getValueModel("list2")); ComboBoxBinder comboBoxBinder = new ComboBoxBinder(); Binding binding = comboBoxBinder.bind(getFormModel(), "selectedInList2", context); builder.add(binding); } return builder.getForm(); } }
testObject list2: [item1 - 1, item1 - 2] form:[item1 - 1, item1 - 2]
testObject list2: [item2 - 1, item2 - 2] form:[item2 - 1, item2 - 2]
the second combox (that reflects list2) show
"item1 - 1".
When I resize the window, the text changes to
"item2 - 1"
But when I click on the second combobox my options are
"item1 - 1" and "item1 - 2"
I would expect it to be
"item2 - 1" and "item2 - 2"
Why doesn't it behave as I expect? Does anyone have any idea how I can achive my wanted behavior?
Best Regards,
.t


Reply With Quote