2017-12-21 1 views
1

PropertyChangeListener에 관한 간단한 질문이 있습니다.두 변경 리스너가 모두 변경 될 때까지 기다려주십시오

나는 3 개의 속성을 가진 Person 클래스를 가지고 있습니다. 그 중 두 개는 사람이지도 상에 가지고있는 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)에 대한 두 개의 필드는 다른 개체와 병합됩니다 (Coordinate라고 부를 수 있음). 좌표가 인 사람들처럼 전체 작업을 할 수 있습니다. 물론 한 번의 호출로 화재가 발생합니다.

관련 문제