【发布时间】:2023-03-27 06:32:01
【问题描述】:
我的 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);
}
}
}
如您所见,我将字体设置为等宽字体,并根据我的项目 ('isSpecialItem') 的标志设置文本和样式
所以,起初它工作正常,当我添加前几个条目时,它们会正确呈现。但是,一旦我选择列表中的任何条目,我的文本标签的字体就会重置为列表单元格的默认字体。有趣的是,似乎只有字体被重置,因为我设置的文本以及样式(粗体或正常)仍然正确应用。
我试着把这行:
text.setFont(Font.font("Monospaced", 12));
在updateItem 方法中,以便在每次更新时重新执行它。但是,它仍然不起作用,因为我注意到当我选择项目时甚至没有调用该方法。
所以最后,问题是:在列表视图中选择时,字体由于某种原因被重置,甚至没有再次调用 updateItem 方法,所以我无法将其设置回所需的字体。
任何人都知道这里发生了什么以及我该如何解决它?
谢谢
【问题讨论】:
标签: listview javafx fonts renderer