我想有一个文本字段,其值总是反映给定对象中某个字段的值。我认为Bindable可能是这样做的方式。但是,使用下面的例子:从修改Groovy可绑定默认值?
#!/usr/bin/env groovy
import groovy.swing.SwingBuilder
import groovy.beans.Bindable
import static javax.swing.JFrame.EXIT_ON_CLOSE
class TextModel {
@Bindable String text
}
def textModel = new TextModel()
def builder=new SwingBuilder()
builder.build {
frame(title: 'Binding Example (Groovy)', size: [240,100], show: true,
locationRelativeTo: null, defaultCloseOperation: EXIT_ON_CLOSE) {
gridLayout cols: 1, rows: 2
textField id: 'textField'
bean textModel, text: bind{ textField.text }
label text: bind{ textModel.text }
}
}
textModel.text="AAAA"
:
http://groovy.codehaus.org/Bindable+and+Vetoable+transformation
只有标签的文本设置为textModel的,但不是文本字段的。
任何想法???
谢谢 米莎
附:我似乎能够得到相反的行为,这里的文本字段反映了变量是状态,但其价值不更新,如果我这样做:
#!/usr/bin/env groovy
import groovy.swing.SwingBuilder
import groovy.beans.Bindable
import static javax.swing.JFrame.EXIT_ON_CLOSE
class TextModel {
@Bindable String text
}
def textModel = new TextModel()
def builder=new SwingBuilder()
builder.build {
frame(title: 'Binding Example (Groovy)', size: [240,100], show: true,
locationRelativeTo: null, defaultCloseOperation: EXIT_ON_CLOSE) {
gridLayout cols: 1, rows: 2
textField id: 'textField',text:bind{ textModel.text }
label text: bind{ textModel.text }
}
}
textModel.text="AAAA"
p.p.s.如果我想补充两个:
#!/usr/bin/env groovy
import groovy.swing.SwingBuilder
import groovy.beans.Bindable
import static javax.swing.JFrame.EXIT_ON_CLOSE
class TextModel {
@Bindable String text
}
def textModel = new TextModel()
def builder=new SwingBuilder()
builder.build {
frame(title: 'Binding Example (Groovy)', size: [240,100], show: true,
locationRelativeTo: null, defaultCloseOperation: EXIT_ON_CLOSE) {
gridLayout cols: 1, rows: 2
textField id: 'textField',text:bind{ textModel.text }
豆textModel,文本:绑定{}的TextField.text标签 文本:绑定{} textModel.text} }
textModel.text="AAAA"
我得到
线程“AWT-EventQueue-0”中的异常java.lang.IllegalStateException:试图在通知中发生变异
ppp秒。这是我最好的解决办法:
#!/usr/bin/env groovy
import groovy.swing.SwingBuilder
import groovy.beans.Bindable
import static javax.swing.JFrame.EXIT_ON_CLOSE
class TextModel {
@Bindable String text
}
def textModel = new TextModel()
textModel.text="AAAA"
def builder=new SwingBuilder()
builder.build {
frame(title: 'Binding Example (Groovy)', size: [240,100], show: true,
locationRelativeTo: null, defaultCloseOperation: EXIT_ON_CLOSE) {
gridLayout cols: 1, rows: 2
textField id: 'textField',text:textModel.text
豆textModel,文本:绑定{}的TextField.text标签 文本:绑定{} textModel.text} }