2013-12-06 3 views
1

Мне нужно изменить класс стиля TableCell в функции отображаемых данных, например: если значение ячейки одинаково в двух смежных строках, ячейка должна быть подсвечена (т.е.: красный фон). Это должно работать как с добавлением данных в таблицу, так и с сортировкой по любому столбцу.JavaFX, change css tablecell в сортировке

Для этого, при сортировке, я добавил слушателя в tableview.getSortOrder() и в его методе onChange логику выполнить то, что я описал выше. К примеру:

public void onChanged(ListChangeListener.Change<? extends TableColumn> change) { 
    if (change.getList().size() > 0) { 
     Platform.runLater(new Runnable() { 
     @Override 
     public void run() { 
      /* set some css on tableview cells */ 
     } 
     }); 
    } 
} 

Проблема в том, что делают так CSS изменения применяются на следующем обновлении таблицы не сразу. Мои подозреваемые делают это внутри Platform.runLater, но мне нужно, чтобы данные были отсортированы так, как они должны быть, перед сменой стилей.

Я сделал что-то не так? Существует ли лучший способ сделать то, что я описал?

ответ

0

Вы можете сделать это, если у вас есть конкретный файл css и добавьте его.

final String css = getClass.getResource("the_css.css").toExternalForm(); 

и добавить в Platform.runLater:

scene.getStylesheet.add(css); 

удалить при необходимости:

scene.getStylesheet.remove(css); 

Не совсем уверен, если это делает трюк, но он должен изменить фон цвет сразу, а не после обновления. я надеюсь, что это поможет вам в правильном направлении.

+0

Просто попробовал, никаких изменений в поведении, пока не описано. – Luca

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