Groovy: Modell und GUI mit @Bindable verbinden ab Groovy 1.6
Ab Version 1.6 unterstützt die Programmiersprache Groovy (Java) die @Bindable-Annotation mit deren Hilfe sich leicht das Datenmodell an GUI-Elemente binden lässt.
import groovy.swing.SwingBuilder
import groovy.beans.Bindable
class PersonModel {
@Bindable String name
}
def personModel = new PersonModel()
SwingBuilder.build {
frame(title: '@Bindable PersonModel',
show : true,
size : [400, 60],
locationRelativeTo : null,
defaultCloseOperation: javax.swing.WindowConstants.EXIT_ON_CLOSE) {
gridLayout(cols: 1, rows: 2)
textField(id: 'inputName')
bind(source: inputName, sourceProperty: 'text',
target: personModel, targetProperty: 'name')
label(text: bind{personModel.name})
} // Frame
} // SwingBuilder
Das ganze basiert intern auf den PropertyChangeListener von Java. Eine Beschreibung der Funktionsweise gibt es von Danno Ferrin in "@Bindable - Observable Properties for Groovy". Eine Beschreibung der verschiedenen Binding-Modelle von Andres Almiray in "SwingBuilder's binding revisited" und "Taking SwingBuilder's binding for a spin".
