2017-03-13 5 views
0

現在、PropertyChangeListenerクラスとPropertyChangeSupportクラスを使用する方法を学んでいます。 リスナーがイベントを受け取った部分でちょっと立ち往生していますので、この部分で何か助けが必要です。PropertyChangeListener Java

私のプログラムでは2つのクラスがあります。

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

    } 
} 

  • 一つ、コントローラは、他のPropertyChangeListener
  • を実装して、このモデルは、propertyChanegSupport

コントローラを実装します

モデル:

/** 
* 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」が画面上に印刷されることはない)のpropertyChange関数に到達しないことです。

ありがとうございます。

答えて

1

documentation for PropertyChangeSupport.firePropertyChangeより:「古い値と新しい値が等しく、nullでない場合、イベントは発生しません」実際に値が変更されていなければイベントを発生させる理由はないため、これは意味があります。

Beanプロパティは、get-methods(または、プロパティの型がプリミティブブール値の場合はis-method)で表されます。書き込み可能なプロパティには対応するset-methodもあります。

public String getMensaje() { 
    return mensaje; 
} 

public void setMensaje(String mensaje) { 
    String old = this.mensaje; 
    this.mensaje = mensaje; 
    changeSupport.firePropertyChange("mensaje", old, this.mensaje); 
} 
:通常、あなたは古い値と新しい値の両方を持つことになり、その場合には、そのようなセット・メソッドから firePropertyChangeを呼ぶだろう
関連する問題