等待两个更改侦听器更改两者

时间:2017-12-21 21:58:41

标签: java changelistener

关于PropertyChangeListener,我有一个简短的问题。

我有一个Person类,它有3个属性。其中两个是人在地图上的xy坐标。

我想在人的坐标发生变化时更新地图。 所以我的问题是检测何时不仅xy发生变化,而且两者都发生变化。

我到底有多远。我希望你能帮助我。

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

2 个答案:

答案 0 :(得分:0)

您可以将boolean xChanged和yChanged属性存储在person的属性更改侦听器类中,然后存储在回调中:

xChanged | ="x". equals(e.source);
yChanged |="y". equals(e.source);
if(xChanged & & yChanged ) {
} 

答案 1 :(得分:0)

您可以使用坐标(xy)将两个字段合并到其他对象(您可以将其称为Coordinate),而不是两个字段。这允许您像整个事物一样使用的坐标。当然,你可以在一次通话中改变它。