Javafx:如何捆绑observableList的事件

时间:2019-03-27 19:46:46

标签: javafx eventhandler observablelist

我使用的是observableList,对此我需要对元素本身的更改做出反应。如果只有其中一个数据集的Elenemnts发生更改,它会很好地工作。但是不幸的是,有时由于外部绑定,所有这些都同时发生变化,而我一次获得了数百个事件,但实际上,如果我只能对其中一个做出反应而忽略其他事件,那就足够了(有效)。

一旦我处理了第一个事件,是否有任何方法可以捆绑此类事件,或者检测它们是否属于同一集合,而忽略其他事件。

如果有人可以提供解决方案,我会很高兴。

请在下面找到简化代码。

首先是数据类

package fxtester;

import javafx.beans.property.BooleanProperty;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;

public class Data {

  private final DoubleProperty number1 = new SimpleDoubleProperty();
  private final DoubleProperty number2 = new SimpleDoubleProperty();

  private BooleanProperty event;


  public Data(BooleanProperty bp) {
      event.bind(bp);

      event.addListener((observable) -> {
          number1.set(number1.get()+1);
          number2.set(number2.get()+1);            
      });
  }

  public DoubleProperty number2Property() {
      return number2;
  }

  public double getNumber1() {
      return number1.get();
  }

  public void setNumber1(double value) {
      number1.set(value);
  }

  public DoubleProperty number1Property() {
      return number1;
  }

  public double getNumber2() {
      return number2.get();
  }

  public void setNumber2(double value) {
      number2.set(value);
  }
}

这里是observableList的基本初始化

 package fxtester;

 import javafx.beans.Observable;
 import javafx.collections.FXCollections;
 import javafx.collections.ListChangeListener;
 import javafx.collections.ObservableList;

 public class Go {

     private ObservableList<Data> data = 
            FXCollections.observableArrayList(param -> new Observable[]{
                 param.number1Property(), param.number2Property()
            });

     public Go() {
         data.addListener(new ListChangeListener<Data>() {
             @Override
             public void onChanged(javafx.collections.ListChangeListener.Change<? extends Data> c) {
                 System.out.println("Event");
             }
         });
     }

 }

0 个答案:

没有答案