【问题标题】:PropertyChangeListener Java属性更改监听器 Java
【发布时间】:2017-03-13 18:42:34
【问题描述】:

我目前正在学习使用 PropertyChangeListener 和 PropertyChangeSupport 类。 我有点卡在侦听器接收事件的部分,所以我需要一些帮助。

在我的程序中有 2 个类:

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

控制器:

    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);
    }

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

提前谢谢你。

【问题讨论】:

    标签: java events event-handling propertychangelistener


    【解决方案1】:

    来自documentation for PropertyChangeSupport.firePropertyChange:“如果新旧值相等且非空,则不会触发任何事件。”这是有道理的,因为如果值实际上没有改变,就没有理由触发事件。

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多