groovy y propiedades enlazadas
hola comunidad quise hacer mi primer blog y empeze por este tema ya que estoy jugando con groovy ya un tiempesito , bueno todos sabemos que java a traves de los javabeans cuenta con PropertyChangeListeners que notifica a todos los oyentes antes registrados con (addPropertyChangeListener) de los cambios de valor de algunas de sus propiedades a traves de firePropertyChanged aqui hay un ejemplo del javabeans que llamaremos modelo
import java.beans.PropertyChangeListener;
public class Modelo{
private String propiedad;
PropertyChangeSupport pcs = new PropertyChangeSupport(this);
public void addPropertyChangeListener(PropertyChangeListener l) {
pcs.add(l);
}
public void removePropertyChangeListener(PropertyChangeListener l) {
pcs.remove(l);
}
public String getProp() {
return prop;
}
public void setProp(String propiedad) {
pcs.firePropertyChanged("propiedad", this.propiedad, this.propiedad = propiedad);
}
}
-las clases registradas a este modelo tienen que implementar la interfaz PropertyChangeListener con su metodo
// Object source = e.getSource();
System.out.println("la propiedad cambio")
}
vemos que es muy tedioso y complicado de manejar
al hacerlo con groovy ahorramos mucho codigo y el codigo es mas entendible ,algo como esto basta con añadir la anotacion @Bindable a la propiedad que deseemos detectar los cambios .
import groovy.beans.Bindable
import static javax.swing.JFrame.EXIT_ON_CLOSE
class texto_para_cambiar {
@Bindable String text
}
def modelo = new texto_para_cambiar()
SwingBuilder.build {
frame( title: 'ejemplo de groovy', size: [240,100], show: true,
locationRelativeTo: null, defaultCloseOperation: EXIT_ON_CLOSE ) {
gridLayout cols: 1, rows: 1
label text: bind{ modelo.text }
}
}
modelo.text="hola java mexico"
si ejecutamos vemos que el label se actualiza ante los cambios del modelo todo en una linea a traves del metodo bind.
pero dentro del diseño grafico en el swingbuilder.
- entonces trate de hacerlo sin interfaz de usuario con puras clases , me trabe un poco pero lo logre hacer con algunos cambios
import java.awt.BorderLayout as BL
import groovy.beans.Bindable
//import java.beans.PropertyChangeSupport;
import java.beans.PropertyChangeListener
class sapeando{
def atributo;
}
class mirame{
@Bindable String caca='caca y pichi';
}
def sapo=new sapeando();
def miracomocambio=new mirame();
miracomocambio.addPropertyChangeListener({
sapo.atributo=miracomocambio.caca
println "hacer algo"
} as PropertyChangeListener)
println sapo.atributo;
println miracomocambio.caca;
//ahora cambiamos a caca solamente
miracomocambio.caca="caca pichi y popo"
//se cambia automaticamente la propiedad llamada atributo de sapo
println miracomocambio.caca;
println sapo.atributo;
si ejecutamos la salida sera:
caca y pichi
hacer algo
caca pichi y popo
caca pichi y popo
probaba con estos y no lo logre.
//bind{source:miracomocambio, sourceProperty: 'caca', target: sapo, targetProperty: 'atributo'} ;
//bean sapo,atributo: bind{ miracomocambio.caca};
les comparto este ejemplo ya que no encontraba la manera de hacerlo fuera del swingbuilder y sus componentes.
- julgo's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios recientes
hace 2 semanas 21 horas
hace 3 semanas 3 días
hace 15 semanas 21 horas
hace 19 semanas 1 día
hace 26 semanas 5 días
hace 34 semanas 5 días
hace 37 semanas 2 días
hace 38 semanas 6 días
hace 42 semanas 1 día
hace 42 semanas 1 día