setRowFactory для TableView updateItem - стиль -fx-font-weight: жирный шрифт не работает - PullRequest
0 голосов
/ 23 октября 2019

По какой-то причине, когда я хочу сделать строку жирным, это не работает. То же самое, если я попытаюсь установить стиль для детей. Я думаю, что это работало в прошлом. Я использую последнюю версию 11.0.2.

См. Ниже мой тестовый код. Я могу использовать цвет, хотя. Цвет работает, шрифт - нет.

Спасибо!

emailsTableView.setRowFactory(new Callback<TableView<EmailMessage>, TableRow<EmailMessage>>() {
    @Override
    public TableRow<EmailMessage> call(TableView<EmailMessage> param) {
        return new TableRow<>() {
            @Override
            protected void updateItem(EmailMessage item, boolean empty) {
                super.updateItem(item, empty);

                if (item != null) {
                    if (item.isRead()) {
                        setStyle("");
                    } else {
                        //setStyle("-fx-font-weight: bold");
                        //setStyle("fx-font-style: italic");
                        //setStyle("-fx-background-color: purple");
                        for (int i=0; i < getChildren().size(); i++) {
                            getChildren().get(i).setStyle("-fx-font-weight: bold");
                            //getChildren().get(i).setStyle("-fx-background-color: purple");
                        }
                    }
                    System.out.println("setupBoldRows " + item + " style: " + getStyle());
                }
            }
        };
    }
}

1 Ответ

1 голос
/ 23 октября 2019

Я не могу сказать вам точную причину вашей проблемы (поскольку я не работаю в среде JavaFX 11). Но я хотел бы, чтобы вы попробовали использовать css styleSheet, чтобы убедиться, что это работает.

В вашем файле CSS:

.table-row-cell:unread{
  -fx-font-weight:bold;
}

В коде:

// Create a unread pseudo state for row.
final PseudoClass unreadPseudoState = PseudoClass.getPseudoClass("unread");

emailsTableView.setRowFactory(new Callback<TableView<EmailMessage>, TableRow<EmailMessage>>() {
    @Override
    public TableRow<EmailMessage> call(TableView<EmailMessage> param) {
      return new TableRow<>() {
          @Override
          protected void updateItem(EmailMessage item, boolean empty) {
              super.updateItem(item, empty);
              if (item != null) {
                  // Update the pseudo state of the row to pick the styling from styleSheet
                  this.pseudoClassStateChanged(unreadPseudoState, !item.isRead());
              }
          }
      };
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...