2017-12-21 14 views
1

PropertyChangeListenerに関する短い質問があります。2つの変更リスナーが両方とも変更されるのを待つ

私はPersonの3つの属性を持つクラスを持っています。それらのうちの2つは、人が地図上に持っているxyの座標です。

人の座標が変わるたびに地図を更新したいと思います。 私の問題は、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

まあ、それぞれのPerson(別個の状態)の位置を知り、それらの値を変更された値と照合する必要があります。あるいは、あなたは 'Person'内でチェックを行い、 「場所が変更されました」というプロパティが変更された場合のみ、プロパティが変更されたイベント – MadProgrammer

答えて

0

あなたはコールバックで、その後の人のプロパティ変更リスナークラスでブールxChangedとyChangedプロパティを格納し、することができます

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

人物座標(xy)の2つのフィールドは、他のオブジェクトにマージします(Coordinateと呼ぶことができます)。それで、あなたはの人物と同じように作業することができます。もちろん、あなたは1回の呼び出しでそれを変えることができます。

関連する問題