我在我的JavaFX應用程序,我在那裏建立了一個自定義單元格呈現如下得到了ListView
: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
方法甚至不會再被調用,因此我無法將其設置回所需的字體。
任何人都知道這裏發生了什麼以及我如何解決它?
感謝
但是不是那麼改變我的應用程序中的所有列表?不幸的是,我目前還沒有使用過JavaFX的CSS,可以給我舉一個例子,說明如何設置這個列表(我已經在一個fxml文件中定義) – user3237736
檢查編輯答案。 – MBec