я получил ListView
в моей JavaFX App, где я создал визуализации ячейки следующим образом:JavaFX ListView: пользовательский шрифт не применяется должным образом
myListView.setCellFactory((params) -> new MyListRenderer());
Отображатель класс:
class MyListRenderer extends ListCell<MyItemClass> {
private final Label text;
MyListRenderer() {
text = new Label();
text.setFont(Font.font("Monospaced", 12));
}
@Override
protected void updateItem(MyItemClass item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setGraphic(null);
setText(null);
} else {
if(item.isSpecialItem()){
text.setText("\u25B6 " + item.getString();
text.setStyle("-fx-font-weight: bold;");
} else {
text.setText(item.getString());
text.setStyle("-fx-font-weight: normal;");
}
setGraphic(text);
}
}
}
Как вы можете видеть, что я устанавливаю шрифт Monospaced, а также я устанавливаю текст и стиль в соответствии с флагом моих предметов ('isSpecialItem')
Итак, он отлично работает вначале, когда я добавляю f Первые несколько записей отображаются правильно. Однако, как только я выберу любую запись в списке, шрифт моей текстовой метки сбрасывается на стандартный шрифт ячеек списка. Интересно, что только шрифт, кажется, сбрасывается, поскольку как текст, который я установил, так и стиль (жирный или обычный), все еще применяются правильно.
Я пытался поставить эту строку:
text.setFont(Font.font("Monospaced", 12));
в методе updateItem
, так что она будет повторно выполняться при каждом обновлении. Однако он все еще не работает, поскольку я заметил, что метод даже не вызывается, когда я выбираю элементы.
Итак, проблема заключается в следующем: при выборе в представлении списка шрифт по какой-то причине сбрасывается, а метод updateItem
еще не вызван, поэтому я не могу установить его обратно на нужный шрифт.
Кто-нибудь знает, что здесь происходит и как я могу это исправить?
Благодаря
но разве это не значит, что все мои списки меняются в моем приложении? К сожалению, я пока не использовал CSS с JavaFX, не могли бы вы привести пример того, как я могу настроить это только для этого списка (который я определил в файле fxml). – user3237736
Проверьте отредактированный ответ. – MBec