我目前正在学习如何使用PropertyChangeListener和PropertyChangeSupport类。我被困在了听者接收事件的部分,所以我需要一些帮助。
在我的程序中有两个类:
主计长:
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”)。
提前谢谢你。
发布于 2017-03-13 19:04:15
在PropertyChangeSupport.firePropertyChange文档中:“如果新旧值相等且非空,则不会触发任何事件。”这是有意义的,因为如果值没有实际更改,就没有理由触发事件。
Bean属性由get-方法表示(如果属性的类型为原始布尔值,则为is -方法)。可写属性也有相应的set-方法.通常,您将从这样的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);
}https://stackoverflow.com/questions/42771112
复制相似问题