关于PropertyChangeListener
,我有一个简短的问题。
我有一个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
}
});
}
}
答案 0 :(得分:0)
您可以将boolean xChanged和yChanged属性存储在person的属性更改侦听器类中,然后存储在回调中:
xChanged | ="x". equals(e.source);
yChanged |="y". equals(e.source);
if(xChanged & & yChanged ) {
}
答案 1 :(得分:0)
您可以使用人坐标(x
和y
)将两个字段合并到其他对象(您可以将其称为Coordinate
),而不是两个字段。这允许您像整个事物一样使用人的坐标。当然,你可以在一次通话中改变它。