【问题标题】:Wait for two change listeners to change both等待两个更改侦听器同时更改
【发布时间】:2017-12-21 21:58:41
【问题描述】:

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

我有一个 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
            }
        });
    }
}

【问题讨论】:

  • 好吧,或者,您需要知道每个 Person 的位置(作为单独的状态)并根据已更改的值检查这些值,或者您需要在 @ 中执行检查987654330@ 并仅在两个属性都更改时生成单独的“位置更改”属性更改事件

标签: java changelistener


【解决方案1】:

您可以将布尔值 xChanged 和 yChanged 属性存储在人员的属性更改侦听器类中,然后在回调中:

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

【讨论】:

    【解决方案2】:

    您可以将 People 坐标的两个字段(xy)合并到其他对象(您可以称之为 Coordinate),而不是使用两个字段。这使您可以像整个事物一样使用 People 的坐标。当然,您可以一键更改它。

    【讨论】:

      猜你喜欢
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      相关资源
      最近更新 更多