我希望有一个文本字段,其值总是反映给定对象中某个字段的值。我想Bindable可能是这样做的。但是,使用以下示例:
#!/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文本,而不是textField文本。
有什么主意吗??
谢谢米莎
附注:我似乎能够得到相反的行为,其中TextField反映变量的状态,但是它的值没有更新,如果我这样做的话:
#!/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 }bean textModel,文本:绑定{ textField.text }标签文本:绑定{ textModel.text }
textModel.text="AAAA"我得到了
线程“Attempt 0”java.lang.IllegalStateException中的异常:尝试在通知中发生变异
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()
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.textbean textModel,文本:绑定{ textField.text }标签文本:绑定{ textModel.text }
发布于 2011-01-28 05:52:14
格里芬装订指南将mutual属性描述为所需的内容。尽管在本例中您没有使用Griffon,但bind似乎是一个标准的Groovy特性。如果您像这样创建textField:
textField id: 'textField', text: bind('text', source: textModel, mutual: true)textField将从textModel.text获取其初始值,当用户在字段中键入时向其写入更新,并在发生textModel.text更改时(例如从某个后台线程)显示更新的值。当我试图绑定像这样的两个文本输入时,我开始得到您描述的IllegalStateExceptions,但似乎一个输入和多个标签都可以。
https://stackoverflow.com/questions/3073778
复制相似问题