When the model of a component changes, it has to fire an event to notify the view(s) as well as the controller(s). The way these fire methods are named is similar to Swing (whether the names make sense or not).
If you inherit from AbstractListModel (as in my example code), you can call fireContentsChanged(this, -1, -1) instead of iterating over the registered listeners yourself. I'm not sure why you sub-classed the ULCComboBox. I never had a need for this, even with custom combo box models. Etienne > -----Original Message----- > From: Cameron Taggart [mailto:[EMAIL PROTECTED] > Sent: Wednesday, May 03, 2006 10:43 AM > To: Etienne Studer > Cc: [email protected] > Subject: Re: [ULC-developer] ComboBox List<Date> setSelectedIndex(0) > > Thanks, your feedback led me in the right direction and I've got it > working. I find it strange that when you change the selected item in > a combo box, that you need to create a "contents changed" event. I > would think some sort of "selection changed" event would be more > appropriate. I had to override the > ULCComboBox#contentsChanged(ListDataEvent). When it received an event, > it kept telling the DateComboBoxModel to setSelectedItem(null). I'm > not really sure why. I've noticed that ULCComboBox(List) doesn't > handle null values in the list as I would expect. To get around that > I use "" when I'm dealing with String's, but I was dealing with Date's > this time around. Here are the main code snippets that ended up > working for me: > > DateComboBoxModel > > import org.springframework.util.ObjectUtils; > > public void setSelectedItem(Object item) { > if(!ObjectUtils.nullSafeEquals(_selectedItem, item)){ > _selectedItem = (Date)item; > ListDataEvent event = new ListDataEvent(this, > ListDataEvent.CONTENTS_CHANGED, -1, -1); > for(IListDataListener listener : listeners){ > listener.contentsChanged(event); > } > } > } > > DateComboBox > > @Override > public void contentsChanged(ListDataEvent event){} > > > Thanks, > Cameron > > > > On 5/2/06, Etienne Studer <[EMAIL PROTECTED]> wrote: > > Hi Cameron > > > > My guess is that you don't fire an event after setting the selected > > element on the combo box model. > > > > Your model should look something like below... > > > > I hope this solves your issue. > > > > Etienne > > > > > > > > public class DateComboBoxModel extends AbstractListModel > > implements IComboBoxModel { > > public Object getSelectedItem() { > > return _selectedItem; > > } > > > > public void setSelectedItem(Object inItem) { > > selectIfChanged(inItem); > > } > > > > private void selectIfChanged(Object inItem) { > > if (!ObjectUtils.equals(_selectedItem, inItem)) { > > _selectedItem = inItem; > > fireContentsChanged(this, -1, -1); > > } > > } > > > > private Object _selectedItem; > > } > > > > > > > > > -----Original Message----- > > > From: [EMAIL PROTECTED] [mailto:ulc-developer- > > > [EMAIL PROTECTED] On Behalf Of Cameron Taggart > > > Sent: Tuesday, May 02, 2006 5:37 PM > > > To: [email protected] > > > Subject: [ULC-developer] ComboBox List<Date> setSelectedIndex(0) > > > > > > I created a DateComboBox and DateComboBoxModel which simply display > > > List<Date>. Selecting a date is optional on my form, so the first > > > date in the list, I've set to null. I have a "clear" button on my > > > form which needs to reset the ComboBox to the first item. Right now, > > > the model gets changed to the correct value, but the ComboBox in the > > > UI does not. Any idea how I might get the ComboBox selection to > > > visually change to the selected item? Was there an event I was > > > supposed to fire off? > > > > > > Thanks, > > > Cameron > > > _______________________________________________ > > > ULC-developer mailing list > > > [email protected] > > > http://lists.canoo.com/mailman/listinfo/ulc-developer > > _______________________________________________ ULC-developer mailing list [email protected] http://lists.canoo.com/mailman/listinfo/ulc-developer
