2017-02-08 64 views
1

我在我的JavaFX應用程序,我在那裏建立了一個自定義單元格呈現如下得到了ListViewJavaFX的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方法甚至不會再被調用,因此我無法將其設置回所需的字體。

任何人都知道這裏發生了什麼以及我如何解決它?

感謝

回答

0

使用CSS文件,並設置字體和大小.list-cell

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

編輯

回答在評論你的問題:是的,這代碼將改變所有的列表單元格在你的應用程序。

您可以創建自己的樣式類選擇器到特定的列表單元格或ID樣式選擇器。請參閱Skinning JavaFX Applications with CSSJavaFX CSS Reference Guide,有簡單的示例如何創建它們。

你的情況,CSS文件:

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

MyListRenderer類:

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

注意,這將改變字體,在定製的ListCell所有Labeled組件。

+0

但是不是那麼改變我的應用程序中的所有列表?不幸的是,我目前還沒有使用過JavaFX的CSS,可以給我舉一個例子,說明如何設置這個列表(我已經在一個fxml文件中定義) – user3237736

+0

檢查編輯答案。 – MBec

相關問題