0 голосов
 
546 просмотров
4.09.2018 / 17:50  Aladdin

Обновление стилей TableRow

Всем привет. Вышла проблемочка. Нужно было в зависимости от данных в таблице подсвечивать строку, как то сделал, т.е. при загрузке данных все идеально работает, подсвечивается, но если изменить состояние (нажав на кнопки State, рис > 1), то фон TableRow должен был изменится, к сожелению нет. Состояние в модели изменяется, но строка обновляется только при загрузке или если скролить пока не будет скрыт.

Вот как подсвечиваю
  1.     private void makeRowFactory() {
  2.  
  3.         table.setRowFactory((TableView<ContractItem> param) -> {
  4.             return new TableRow<ContractItem>() {
  5.  
  6.                 @Override
  7.                 protected void updateItem(ContractItem item, boolean empty) {
  8.                     super.updateItem(item, empty);
  9.  
  10.                     if (!empty && item != null) {
  11.  
  12.                         getStyleClass().remove("row-state-complete");
  13.                         getStyleClass().remove("row-state-refused");
  14.                         getStyleClass().remove("row-state-late");
  15.                         getStyleClass().remove("row-state-lating");
  16.  
  17.                         if (item.getState() == StateType.DISCART) {
  18.                             getStyleClass().add("row-state-refused");
  19.                         }
  20.                         else if (item.getState() == StateType.COMPLETE) {
  21.                             getStyleClass().add("row-state-complete");
  22.                         }
  23.                         else if (item.getLimit().isBefore(LocalDate.now())) {
  24.                             getStyleClass().add("row-state-late");
  25.                         }
  26.                         else {
  27.                             LocalDate minusDate = item.getLimit().minusDays(6);
  28.                             LocalDate nowDate = LocalDate.now();
  29.  
  30.                             if (minusDate.isBefore(nowDate) || minusDate.isEqual(nowDate)) {
  31.                                 getStyleClass().add("row-state-lating");
  32.                             }
  33.                         }
  34.                     }
  35.                 }
  36.             };
  37.         });
  38.     }


Можно ли как то получить строку (TableRow) из TableView, дальше уже не будет проблем. Например как то так

  1. // вызывается при нажатии на кнопки State рис 1
  2. public void stateUpdated(StateType state, ContractItem item) {
  3.  
  4.     int i = table.getItems().indexOf(item);
  5.     TableRow row = getTableRowAt(i); // как то так получить TableRow
  6.     row.updateItem(item, false);
  7. }

Поковырялся в доках, в гугле ничего стоящего не нашел. Подскажите пожалуйста

mid.png (54.49 кб.)
Ответы
 
0 голосов
 
# 5.09.2018 / 10:06  Aladdin
  1. TableView.refresh()
Всего: 1

Реклама

Мы в соцсетях

tw tg yt gt