我的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,上面的代码就可以工作。
答案 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))