import java.beans.PropertyVetoException;
public class Main {
public static void main(String[] args) {
Purchase purch = new Purchase("Computer");
PurchaseView pView = new PurchaseView();
purch.addPropertyChangeListener(pView);
try {
purch.setData("Notebook");
System.out.println(purch);
} catch (PropertyVetoException exc) {
System.out.println(exc.getMessage());
}
}
}
您有购买和购买视图类:
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyVetoException;
public class Purchase {
private String data;
private PropertyChangeSupport propertyChange = new PropertyChangeSupport(this);
public Purchase(String data) {
this.data = data;
}
public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChange.addPropertyChangeListener(listener);
}
public synchronized void removePropertyChangeListener(PropertyChangeListener l) {
propertyChange.removePropertyChangeListener(l);
}
public String getData() {
return data;
}
public void setData(String data) {
String oldValue = data;
this.data = data;
propertyChange.firePropertyChange("data", oldValue, data);
}
}
}
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public class PurchaseView implements PropertyChangeListener{
public PurchaseView() {}
@Override
public void propertyChange(PropertyChangeEvent evt) {
String propName = evt.getPropertyName();
if(propName.equals("data")) {
String oldValue = (String) evt.getOldValue();
String newValue = (String) evt.getNewValue();
System.out.println("Change value of: " + evt.getPropertyName() + " from: " + oldValue + " to: " + newValue);
}
}
}
我希望该程序在更改数据属性时在puphieView类中显示的输出。它似乎对我实现了,但行不通。
有什么想法?
您的输出是什么?
我认为您刚在setData方法中犯了一个错误。应该是这样的:
public void setData(String data) {
String oldValue = this.data;
this.data = data;
propertyChange.firePropertyChange("data", oldValue, data);
}
请注意,您忘记了 this
在setData方法的第一行中保留的单词,wich表示您将方法变量代替类变量。