1

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

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 = []。

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

我将状态从列表更改为范围对象(虚拟),它给了我一个错误 MissingPropertyException No such property items for class java.swing.JComboBox。

我在这里错过了什么吗?在 Nabble 上有几个与此相关的条目,但没有什么是清楚的。如果我有一个标签而不是第二个组合框,上面的代码就可以工作。

4

2 回答 2

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))
于 2010-03-15T15:36:57.570 回答
2

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

于 2010-02-21T22:57:22.983 回答