我必須使用ListView顯示5000個節點。每個節點都包含複雜的控件,但只有一些文本部分在節點中不同。我如何重複使用現有節點控件在滾動時重新創建我的單元格JavaFX虛擬化控件使用
0
A
回答
0
James_D的答案指向了正確的方向。通常情況下,在JavaFX中,您不必擔心重複使用現有節點--JavaFX框架完全可以實現這一點,即開即用。如果你想實現一些自定義單元格呈現,你需要設置一個電池廠,這通常是這樣的:
listView.setCellFactory(new Callback() {
@Override
public Object call(Object param) {
return new ListCell<String>() {
// you may declare fields for some more nodes here
// and initialize them in an anonymous constructor
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty); // Default behaviour: zebra pattern etc.
if (empty || item == null) { // Default technique: take care of empty rows!!!
this.setText(null);
} else {
this.setText("this is the content: " + item);
// ... do your custom rendering!
}
}
};
}
});
請注意:這應該工作,但僅是說明性的 - 我們的Java離散事件知道,如,我們會使用StringBuilder進行字符串連接,特別是在代碼經常執行的情況下。 如果你想要一些複雜的渲染,你可以使用額外的節點構建該圖形,並使用setGraphic()將它們設置爲圖形屬性。這與Label控件類似:
// another illustrative cell renderer:
listView.setCellFactory(new Callback() {
@Override
public Object call(Object param) {
return new ListCell<Integer>() {
Label l = new Label("X");
@Override
protected void updateItem(Integer item, boolean empty) {
super.updateItem(item, empty);
if (empty || item == null) {
this.setGraphic(null);
} else {
this.setGraphic(l);
l.setBackground(
new Background(
new BackgroundFill(
Color.rgb(3 * item, 2 * item, item),
CornerRadii.EMPTY,
Insets.EMPTY)));
l.setPrefHeight(item);
l.setMinHeight(item);
}
}
};
}
});
+0
在第二代碼中,我們創建和刪除標籤控件,只要我們滾動或項目的變化,有沒有一種方法,我們可以緩存這個控制重用? –
相關問題
- 1. 控制JavaFX虛擬鍵盤的尺寸
- 2. JavaFX虛擬鍵盤
- 3. 什麼是「虛擬化控制」? (在JavaFX文檔中提到)。
- 4. 硬件虛擬化
- 5. 測試使用虛擬化
- 6. 使用UIA自動化虛擬化控制
- 7. JavaFX的拖放將使Java虛擬機
- 8. 使用虛擬單核虛擬化guest虛擬機上的所有cpu核心
- 9. 虛擬列表控件(MFC)
- 10. TreeView虛擬化
- 11. 虛擬化WrapPanel
- 12. 虛擬化treelistview?
- 13. 爲什麼ListView沒有虛擬化我的用戶控件?
- 14. KVM虛擬化10gbe虛擬以太網
- 15. Windows Phone風格使ListBox的虛擬化禁用。如何恢復虛擬化?
- 16. 使用Python控制Hyper-V虛擬機
- 17. 使用Python腳本控制虛擬機
- 18. 無法啓用虛擬化
- 19. Silverlight:禁用UI虛擬化?
- 20. 使用多義線的UI虛擬化
- 21. 使用虛擬化的系統聚合
- 22. 硬件虛擬化 - 虛擬機管理程序查詢
- 23. Gentoo VirtualBox guest虛擬機沒有硬件虛擬化引導
- 24. WPF ItemControl虛擬化
- 25. 虛擬機優化
- 26. DataGrid UI虛擬化
- 27. 虛擬化環境
- 28. WinRT ListView虛擬化
- 29. 檢測虛擬化
- 30. DataGrid:半虛擬化
什麼是細胞?你在使用TableView嗎? – VGR
如果只有文本不同,那麼'ListView'的數據類型應該是'String',列表視圖的'items'應該只包含5000個字符串。然後使用單元工廠來配置顯示器。除了沒有更多細節和代碼之外,很難回答你的問題:你可能想編輯你的問題來提供這個問題。 –