PropertyChangeListener Java



我目前正在学习使用属性changelistener和propertyChangeSupport类。我有点陷入听众接收活动的部分,所以我需要在这部分方面提供一些帮助。

在我的程序中有两个类:

  • 一个,控制器,实现了属性Changelistener
  • 另一个模型实现了属性chanegsupport

控制器:

    public class Controlador implements PropertyChangeListener {
        private ControlAccesos modelo;
        private GUIpanel vistaPan;
        private GUIsenal vistaSen;

     public Controlador(GUIpanel vista1, GUIsenal vista2, ControlAccesos model){
        modelo=model;
        vistaPan = vista1;
        vistaSen = vista2;
        modelo.addPropertyChangeListener(this);
     }

     public void propertyChange(PropertyChangeEvent evt) {
        System.out.print("Resultado");
        if (evt.getPropertyName().equals("mensaje")){
            vistaPan.refrescaMensaje((String)evt.getNewValue());
        }
     }
}

模型:

/**
 * Clase principal del sistema de control de accesos a la facultad.
 */
public class ControlAccesos
{
    /**
     * Mesaje shown in the GUI
     */
    private String mensaje;
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
     .
     .
     .
    public void TarjetaDetectada( String usuario )
    {
        state.TarjetaDetectada(this, usuario);
        changeSupport.firePropertyChange("mensaje",this.mensaje,this.mensaje);
    }
    public void addPropertyChangeListener( PropertyChangeListener listener ){
        changeSupport.addPropertyChangeListener(listener);
    }

问题是代码永远不会到达属性汇总函数(" resultado"从未在屏幕上打印)。

预先感谢您。

来自属性changesupport.firepropertychange的文档中:"如果旧值和新值相等且非零子,则不会触发任何事件。"这是有道理的,因为如果值实际上没有更改,则没有理由发射事件。

bean属性由get-hethods表示(或者,如果属性的类型是原始的布尔值,则是iS-hethod)。可写的特性还具有相应的设定方法。通常,您会从这样的设置中调用firePropertyChange,在这种情况下,您既有旧值又有新值:

public String getMensaje() {
    return mensaje;
}
public void setMensaje(String mensaje) {
    String old = this.mensaje;
    this.mensaje = mensaje;
    changeSupport.firePropertyChange("mensaje", old, this.mensaje);
}

相关内容

  • 没有找到相关文章

最新更新