2016-12-11 3 views
0

У меня есть огромное количество данных, которые я показываю с TableView в JavaFX. С помощью JavaFX 8 Sortung Filtering я смог реализовать фильтр в зависимости от ввода (TextField). Есть только несколько разных состояний, которые могут иметь записи, поэтому я хочу сделать quickselect с помощью флажков.
Например: пользователь хочет видеть все строки с состоянием «Выполняется» или «Завершено». Поэтому он проверяет два флажка со специфическими состояниями.Javafx update tableview on checkbox change

Как мне реализовать конкретный прослушиватель, что TableView будет показывать только отфильтрованные данные?

Мой код до сих пор:

ChangeListener<Boolean> cbStateChangeListener = new ChangeListener<Boolean>() { 
    @Override 
     public void changed(ObservableValue<? extends Boolean> ov, Boolean old_val, Boolean new_val) { 
      if (new_val){ 

      } 
     } 
    }; 

Как поступить в Условный оператор?

ответ

1

Повторно примените заполнение своего вида, используя текущее состояние флажков?

+0

Это, вероятно, не очень хороший подход. Поскольку OP уже использует 'FilteredList', будет более эффективным только изменить предикат в фильтре. Повторное заполнение списка с нуля также потеряет важное значение в таблице, например, выбор. –

1

Вы можете просто привязать свойство predicate от FilteredList к обязательной ссылке с выбранными свойствами в качестве зависимостей.

Может быть, вы будете в состоянии оптимизировать это, использовать меньше объектов ЭСТ, однако, вероятно, you aren't gonna need that.

private Predicate<MyItemType> createPredicate() { 
    ... 
} 
filteredList.predicateProperty().bind(Bindings.createObjectBinding(this::createPredicate, checkBox1.selectedProperty(), checkBox2.selectedProperty(), ...)); 

КСТАТИ:. Это может быть полезно использовать Predicate.or объединить Predicate сек, связанные с каждым выбранным CheckBox.

Смежные вопросы