Je voudrais avoir un champ de texte dont la valeur reflète toujours celle d'un certain champ dans un objet donné. Je pensais que Bindable pourrait être le moyen de le faire. Cependant, en utilisant l'exemple suivant:Groovy Bindable valeur par défaut?
#!/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"
modifié à partir de:
http://groovy.codehaus.org/Bindable+and+Vetoable+transformation
seul le texte de l'étiquette est définie sur celle de textModel, mais pas celle de la textField.
Des idées ???
Merci Misha
P.S. Il me semble être en mesure d'obtenir le comportement opposé, où l'TextField reflète que l'état de la variable, mais sa valeur est pas mise à jour, si je fais:
#!/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. Si je COMBINEZ:
#!/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 haricot, texte: bind {} TextField.text texte étiquette: bind {} textModel.text }}
textModel.text="AAAA"
je reçois
Exception dans le fil "AWT-EventQueue-0" java.lang.IllegalStateException: tentative de muter dans la notification
ppp s. Ceci est ma meilleure solution:
#!/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 haricot, texte: bind {} TextField.text texte étiquette: bind {} textModel.text }}