动态填充Griffon App中的comboBox

时间:2010-02-21 06:48:37

标签: groovy combobox griffon swingbuilder

我的Griffon App视图(或groovy swingBuilder)中有2个组合框

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))

控制器中的getStates()根据所选国家/地区在模型中填充@Bindable List states = []。

上面的代码没有给出任何错误,但是从不填充状态。

我将状态从List更改为范围对象(虚拟),它给我一个错误MissingPropertyException类java.swing.JComboBox没有这样的属性项。

我在这里遗漏了什么吗?在Nabble上有几个与此相关的条目,但没有什么是明确的。如果我有一个标签而不是第二个comboBox,上面的代码就可以工作。

2 个答案:

答案 0 :(得分:2)

我相信items:属性是不可观察的,它只在构建节点时使用。通过在模型上设置绑定或使用GlazedLists的EventList,可以获得更好的结果。

答案 1 :(得分: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))