У меня есть приложение javafx, которое использует jmetro в качестве темы. В табличном представлении я пытаюсь изменить цвет текста на основе значения одного из столбцов.
Я принял следующий код:
Мой контроллер
@Override
public void initialize(URL location, ResourceBundle resources) {
super.initialize(location, resources);
......
initializeToLabel();
.......
}
@Override
void initializeTable(){
table.setItems(subList());
colId.setCellValueFactory(new PropertyValueFactory<>("idBankMovement"));
.....
colIdCategory.setCellValueFactory(bm -> new SimpleStringProperty(bm.getValue().getCategory().getName()));
colIdCategoryChild.setCellValueFactory(bm -> new SimpleStringProperty(bm.getValue().getCategoryChild().getName()));
....
table.setRowFactory(getRowFactory());
}
private Callback<TableView<BankMovement>, TableRow<BankMovement>> getRowFactory() {
return new Callback<TableView<BankMovement>, TableRow<BankMovement>>() {
@Override
public TableRow<BankMovement> call(final TableView<BankMovement> param) {
return new TableRow<BankMovement>() {
@Override
public void updateItem(BankMovement item, boolean empty) {
super.updateItem(item, empty);
if (item == null)
setStyle("");
else if ( item.getCategory().getInOut().equals(Utils.AMOUNT_CREDIT)){
getStyleClass().forEach(c->log.error(c));
getStyleClass().removeAll();
getStyleClass().add("row-red");
}
else if (item.getCategory().getInOut().equals(Utils.AMOUNT_DEBIT))
setStyle("-fx-text-fill: #FF0000 !important; -fx-font-weight: bold");
else
setStyle("");
}
};
}
};
}
Класс CSS
.row-red {-fx-text-fill: white!important; -fx-background-color: grey}
Читая документы в Интернете, я увидел, что нужно что-то делать
.row-red .table-cell {-fx-text-fill: white!important; -fx-background-color: grey}
Применяется любой стиль, кроме цвета текста.
Даже при использовании встроенного стиля, а не CSS, результат не меняется.