首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PropertyChangeListener Java

PropertyChangeListener Java
EN

Stack Overflow用户
提问于 2017-03-13 18:42:34
回答 1查看 931关注 0票数 0

我目前正在学习如何使用PropertyChangeListener和PropertyChangeSupport类。我被困在了听者接收事件的部分,所以我需要一些帮助。

在我的程序中有两个类:

  • 一个是控制器,实现PropertyChangeListener。
  • 另一个模型实现了propertyChanegSupport

主计长:

代码语言:javascript
复制
    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());
        }

     }
}

型号:

代码语言:javascript
复制
/**
 * 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);
    }

问题是,代码永远不会到达propertyChange函数(屏幕上从来没有打印“Resultado”)。

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-13 19:04:15

PropertyChangeSupport.firePropertyChange文档中:“如果新旧值相等且非空,则不会触发任何事件。”这是有意义的,因为如果值没有实际更改,就没有理由触发事件。

Bean属性由get-方法表示(如果属性的类型为原始布尔值,则为is -方法)。可写属性也有相应的set-方法.通常,您将从这样的set-方法调用firePropertyChange,在这种情况下,您将同时拥有一个旧值和一个新值:

代码语言:javascript
复制
public String getMensaje() {
    return mensaje;
}

public void setMensaje(String mensaje) {
    String old = this.mensaje;
    this.mensaje = mensaje;
    changeSupport.firePropertyChange("mensaje", old, this.mensaje);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42771112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档