JavaFX ListView:自定义字体未正确应用
我在JavaFX应用程序中获得了一个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
列表视图
,我在其中设置了一个自定义单元格渲染器,如下所示:
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();
}