首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy Bindable默认值?

Groovy Bindable默认值?
EN

Stack Overflow用户
提问于 2010-06-19 00:04:21
回答 1查看 1.5K关注 0票数 1

我希望有一个文本字段,其值总是反映给定对象中某个字段的值。我想Bindable可能是这样做的。但是,使用以下示例:

代码语言:javascript
复制
#!/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反映变量的状态,但是它的值没有更新,如果我这样做的话:

代码语言:javascript
复制
#!/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.如果我将两者加在一起:

代码语言:javascript
复制
#!/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 }

代码语言:javascript
复制
textModel.text="AAAA"

我得到了

线程“Attempt 0”java.lang.IllegalStateException中的异常:尝试在通知中发生变异

P.S.这是我最好的解决办法:

代码语言:javascript
复制
#!/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

bean textModel,文本:绑定{ textField.text }标签文本:绑定{ textModel.text }

EN

回答 1

Stack Overflow用户

发布于 2011-01-28 05:52:14

格里芬装订指南mutual属性描述为所需的内容。尽管在本例中您没有使用Griffon,但bind似乎是一个标准的Groovy特性。如果您像这样创建textField

代码语言:javascript
复制
  textField id: 'textField', text: bind('text', source: textModel, mutual: true)

textField将从textModel.text获取其初始值,当用户在字段中键入时向其写入更新,并在发生textModel.text更改时(例如从某个后台线程)显示更新的值。当我试图绑定像这样的两个文本输入时,我开始得到您描述的IllegalStateExceptions,但似乎一个输入和多个标签都可以。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3073778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档