1 回答

TA貢獻1853條經驗 獲得超9個贊
item
a 的屬性最初ListCell
是null
。Color.web
不接受null
作為參數。此外,您需要能夠處理這樣一個事實,即 a 的項目ListCell
可以在其生命周期內被替換,并且相同的項目可以分配給不同的單元格。ListView
只創建填充視圖所需的單元格,如果例如可滾動區域的視口發生變化,則需要顯示不同的項目,并且單元格被重用以顯示更改后的項目集。
如果您擔心 中某些計算的性能updateItem
,您可以將結果緩存在映射中(如果SoftReference
您擔心內存消耗,可以將值包裝在 s 中)。
在這種情況下,這是沒有必要的,因為:
Color.web
不貴,命名的顏色,比如你使用的項目,
Map
無論如何都存儲在一個地方;Color
無論將相同參數傳遞給 . 的頻率如何,每種不同的命名顏色都只會創建一個實例Color.web
。
順便說一句:我不建議以不能成為調用結果的方式初始化單元格updateItem
。在您的情況下,graphic
空單元格的屬性不null
包括初始狀態。如果您擔心一致的單元格大小,最好始終保留圖形并設置其可見性:
public class cell extends ListCell<String> {
private final Rectangle rect;
cell() {
super();
this.rect = new Rectangle(20,20);
setGraphic(this.rect);
}
@Override
protected void updateItem(String s, boolean empty) {
super.updateItem(s, empty);
if(empty)
rect.setVisible(false);
else {
rect.setFill(Color.web(getItem()));
rect.setVisible(true);
}
}
}
添加回答
舉報