6.2.2 Additional Properties - Reference Documentation
Authors: Andres Almiray
Version: 1.2.0
6.2.2 Additional Properties
The following properties can be used with either the long or contextual binding syntax- mutual:
true
then a bidirectional binding will be created instead.import groovy.beans.Bindable import groovy.swing.SwingBuilderclass MyModel { @Bindable String value }def model = new MyModel() def swing = new SwingBuilder() swing.edt { frame(title: 'Binding', pack: true, visible: true) { gridLayout(cols: 2, rows: 3) label 'Normal' textField(columns: 20, text: bind('value', target: model)) label 'Bidirectional' textField(columns: 20, text: bind('value', target: model, mutual: true)) label 'Model' textField(columns: 20, text: bind('value', source: model)) } }
- converter:
import groovy.beans.Bindable import groovy.swing.SwingBuilderclass MyModel { @Bindable String value }def convertValue = { val -> '*' * val?.size() }def model = new MyModel() def swing = new SwingBuilder() swing.edt { frame(title: 'Binding', pack: true, visible: true) { gridLayout(cols: 2, rows: 3) label 'Normal' textField(columns: 20, text: bind('value', target: model)) label 'Converter' textField(columns: 20, text: bind('value', target: model, converter: convertValue)) label 'Model' textField(columns: 20, text: bind('value', source: model)) } }
- reverseConverter:
- validator:
false
or null
.import groovy.beans.Bindable import groovy.swing.SwingBuilderclass MyModel { @Bindable String value }def isNumber = { val -> if(!val) return true try { Double.parseDouble(val) } catch(NumberFormatException e) { false } }def model = new MyModel() def swing = new SwingBuilder() swing.edt { frame(title: 'Binding', pack: true, visible: true) { gridLayout(cols: 2, rows: 3) label 'Normal' textField(columns: 20, text: bind('value', target: model)) label 'Converter' textField(columns: 20, text: bind('value', target: model, validator: isNumber)) label 'Model' textField(columns: 20, text: bind('value', source: model)) } }
This type of validation is not suitable for semantic validation (a.k.a. constraints in domain classes). You would want to have a look at the Validation plugin.
- sourceEvent:
PropertyChangeEvent
.
- sourceValue:
sourceevent
.import groovy.beans.Bindable import groovy.swing.SwingBuilderclass MyModel { @Bindable String value }def model = new MyModel() def swing = new SwingBuilder() swing.edt { frame(title: 'Binding', pack: true, visible: true) { gridLayout(cols: 2, rows: 3) label 'Text' textField(columns: 20, id: 'tf1') label 'Trigger' button('Copy Text', id: 'bt1') bind(source: bt1, sourceEvent: 'actionPerformed', sourceValue: {tf1.text}, target: model, targetProperty: 'value') label 'Model' textField(columns: 20, text: bind('value', source: model)) } }
ActionEvent
s pumped by the button.