我想有一個文本字段,其值總是反映給定對象中某個字段的值。我認爲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} }