Java 源对象顺序属性更改时,数据列表更新
我有一个orderProperty对象Java 源对象顺序属性更改时,数据列表更新,java,collections,glazedlists,Java,Collections,Glazedlists,我有一个orderProperty对象 class Car { private int order; // getter and setter implementation } 然后创建事件列表: EventList<Car> cars=new BasicEventList<Car>() for (i=0;i<10;i++) {Car car=new Car(i); cars.add(car);} EventList cars=new Basi
class Car
{
private int order;
// getter and setter implementation
}
然后创建事件列表:
EventList<Car> cars=new BasicEventList<Car>()
for (i=0;i<10;i++) {Car car=new Car(i); cars.add(car);}
EventList cars=new BasicEventList()
对于(i=0;iQ):如何通知列表订单更改
可能的案例场景不一定是最好的
car类可以实现。然后在每个setter中,值更改之后,您可以通知侦听器
在创建列表的代码中,可以将侦听器添加到car中,以检查order属性的更改并重新排序列表
示例事件
public class PropertyChangeEvent extends EventObject {
private final String propertyName;
private final Object oldValue;
private final Object newValue;
public PropertyChange(String propertyName, Object oldValue, Object newValue) {
this.propertyName = propertyName;
this.oldValue = oldValue;
this.newValue = newValue;
}
public String getProperty() {
reutnr this.propertyName;
}
//Rest of getters were omitted.
}
听众呢
public abstract interface PropertyChangeListener extends EventListener {
public abstract void propertyChange(PropertyChangeEvent event);
}
然后,您应该编写一个支持属性更改的类,它应该具有addPropertyChangeListener(PropertyChangeListener pcl)、firePropertyChange(PropertyChangeEvent pce)等方法
当物业经理换完房子后,你唯一要做的就是
public class Car {
private PropertyChangeManager manager = new PropertyChangeManager(Car.class);
/* The omitted code*/
public void setOrder(int order) {
int oldValue = this.order;
this.order = order;
manager.firePropertyChange("order", oldValue, this.order);
}
public void addPropertyChangeListener(PropertyChangeListener pcl) {
this.manager.addPropertyChangeLIstener(pcl);
}
}
在你使用这个列表的课堂上
private SortedList<Car> sortedCars=new SortedList<Car>();
private PropertyChangeListener listReorder = new ProprtyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
if("order".equals(event.getProperty()) {
reoderCars();
}
}
public boolean addCarToOrderList(Car car) {
/* Safety code omitted */
boolean result = false;
if(sortedCars.contains(car) == false) {
result = sortedCars.add(car);
}
if(result) {
car.addPropertyChangeListener(listReorder); //We assume that this is safe
}
return result;
}
public void reoderCars() {
synchronized(this.sortedCar) {
//the code that will sort the list.
}
}
private SortedList sortedCars=new SortedList();
私有PropertyChangeListener listReorder=new-PropertyChangeListener(){
@凌驾
公共作废propertyChange(PropertyChangeEvent事件){
if(“order”.equals(event.getProperty()){
reoderCars();
}
}
公共布尔值addCarToOrderList(汽车){
/*省略安全代码*/
布尔结果=假;
if(分拣车包含(车)=false){
结果=分拣车。添加(车);
}
如果(结果){
car.addPropertyChangeListener(listReorder);//我们假设这是安全的
}
返回结果;
}
公共车辆{
已同步(此.sortedCar){
//将对列表进行排序的代码。
}
}
我发现了一个丑陋但简单的解决方案:调用集合。在orderProperty发生任何更改后进行排序(sortedCars、carsComparator)
public class Car {
private PropertyChangeManager manager = new PropertyChangeManager(Car.class);
/* The omitted code*/
public void setOrder(int order) {
int oldValue = this.order;
this.order = order;
manager.firePropertyChange("order", oldValue, this.order);
}
public void addPropertyChangeListener(PropertyChangeListener pcl) {
this.manager.addPropertyChangeLIstener(pcl);
}
}
private SortedList<Car> sortedCars=new SortedList<Car>();
private PropertyChangeListener listReorder = new ProprtyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
if("order".equals(event.getProperty()) {
reoderCars();
}
}
public boolean addCarToOrderList(Car car) {
/* Safety code omitted */
boolean result = false;
if(sortedCars.contains(car) == false) {
result = sortedCars.add(car);
}
if(result) {
car.addPropertyChangeListener(listReorder); //We assume that this is safe
}
return result;
}
public void reoderCars() {
synchronized(this.sortedCar) {
//the code that will sort the list.
}
}