【发布时间】:2017-12-21 21:58:41
【问题描述】:
我有一个关于PropertyChangeListeners 的简短问题。
我有一个 Person 类,它有 3 个属性。其中两个是人在地图上的x 和y 坐标。
我想在人的坐标发生变化时更新地图。
所以我的问题是不仅要检测x 或y 何时发生变化,而且两者都发生变化。
这就是我得到的。我希望你能帮助我。
Person.java:
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class Person {
private int x, y, hp;
private PropertyChangeSupport changes = new PropertyChangeSupport( this );
public Person (int x, int y) {
this.x = x;
this.y = y;
}
public void setX( int x) {
int oldX = x;
this.x = x;
changes.firePropertyChange( "x", oldX, x );
}
public void setY( int y) {
int oldY = y;
this.y = y;
changes.firePropertyChange( "y", oldY, y );
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public void addPropertyChangeListener( PropertyChangeListener l ) {
changes.addPropertyChangeListener( l );
}
public void removePropertyChangeListener( PropertyChangeListener l ) {
changes.removePropertyChangeListener( l );
}
}
Map.java:
private void initPeople() {
people = new Person[amount];
PropertyChangeSupport
for (Person p : people) {
person.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent e) {
// IF Person x AND y changed DO something
}
});
}
}
【问题讨论】:
-
好吧,或者,您需要知道每个
Person的位置(作为单独的状态)并根据已更改的值检查这些值,或者您需要在 @ 中执行检查987654330@ 并仅在两个属性都更改时生成单独的“位置更改”属性更改事件
标签: java changelistener