2010-02-21 6 views
1

У меня 2 ComboBoxes на мой взгляд белоголового App (или заводной SwingBuilder)заполнить выпадающий в Белоголовый App динамически

country = comboBox(items:country(), selectedItem: bind(target:model, 'country', 
      value:model.country), actionPerformed: controller.getStates) 

state = comboBox(items:bind(source:model, sourceProperty:'states'), 
        selectedItem: bind(target:model, 'state', value:model.state)) 

The getStates() в контроллере, населяет @Bindable Список утверждает = [] в модель на основе выбранной страны.

Приведенный выше код не дает никаких ошибок, но состояния никогда не заселены.

Я изменил состояния из списка на объект диапазона (манекен), он дает мне ошибку MissingPropertyException Нет таких элементов свойств для класса java.swing.JComboBox.

Я что-то упустил? Есть несколько записей, связанных с этим в Nabble, но ничего не ясно. Вышеприведенный код работает, если у меня есть метка вместо второго comboBox.

ответ

2

Я считаю, что элементы: свойство не наблюдается, и оно используется только в то время, когда узел строится. У вас могут быть лучшие результаты, установив привязку к модели или используя EventList для GlazedLists.

+0

Понял. Благодаря!! – kulkarni

+0

Из того, что я читал, свойство объектов не связывается как источник. Источник обновляет только обновление всей коллекции, то есть model.states = ['TT', 'CX'] Если вы хотите активировать изменения в списке, используйте наблюдаемый список и привяжите его к события наблюдаемого списка. – shemnon

2

Модель:

@Bindable String country = "" 
    EventList statesList = new BasicEventList() 

Контроллер:

def showStates = { evt = null -> 
    model.statesList.clear() 
    def states = [] 
    if(model.country == "US") 
       states = ["CA","TX", "CO", "VA"] 
    else if(model.country == "Canada") 
     states = ["BC", "AL"] 
    else 
      states = ["None"] 

    edt {model.statesList.addAll(states.collect{it})} 
    } 

Вид:

def createComboBoxStatesModel() { 
        new EventComboBoxModel(model.daysList) } 

    comboBox(items:["USA","Canada","other"], selectedItem: bind(target:model, 'country', value: model.country), actionPerformed : controller.showStates) 

    comboBox(model: createComboBoxStatesModel(), selectedItem: bind(target:model, 'state', value:model.state)) 
+0

Я полагаю, что «model.daysList» в закрытии createComboBoxStatesModel должно быть «model.statesLlist»? –