JavaFX ListView:自定义字体未正确应用

JavaFX ListView:自定义字体未正确应用,listview,javafx,fonts,renderer,Listview,Javafx,Fonts,Renderer,我在JavaFX应用程序中获得了一个列表视图,我在其中设置了一个自定义单元格渲染器,如下所示: myListView.setCellFactory((params) -> new MyListRenderer()); 渲染器类: class MyListRenderer extends ListCell<MyItemClass> { private final Label text; MyListRenderer() { text

我在JavaFX应用程序中获得了一个
列表视图
,我在其中设置了一个自定义单元格渲染器,如下所示:

    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);
        }
    }
}
updateItem
方法中,以便在每次更新时重新执行它。但是,它仍然不起作用,因为我注意到,当我选择项时,甚至没有调用该方法

最后,问题是:在列表视图中进行选择时,由于某种原因,字体被重置,并且
updateItem
方法甚至不再被调用,因此我无法将其设置回所需的字体

有人知道这里发生了什么,我怎么能解决它吗


谢谢

使用CSS文件并将字体系列和字体大小设置为
。列出单元格

.list-cell {
    -fx-font-family: "Monospaced";
    -fx-font-size: 12px;
}
编辑

在评论中回答您的问题:是的,该代码将更改应用程序中的所有列表单元格

可以为特定的列表单元格或ID样式选择器创建自己的样式类选择器。请参见和,这里有一些简单的示例,说明如何创建它们

在您的CSS文件中:

.custom-list-cell {
    -fx-font-family: "Monospaced";
    -fx-font-size: 12px;
}
MyListRenderer
class:

MyListRenderer() {
    getStyleClass().add("custom-list-cell");
    text = new Label();
}

请注意,这将更改自定义ListCell中所有组件的字体。

但这不是会更改我应用程序中的所有列表吗?不幸的是,到目前为止,我还没有在JavaFX中使用CSS,您能给我一个示例,说明如何为这个列表(我在fxml文件中定义了这个列表)设置CSS吗
MyListRenderer() {
    getStyleClass().add("custom-list-cell");
    text = new Label();
}