Я должен отображать 5000 узлов, используя ListView. Каждый узел содержит сложные элементы управления, но только часть текста отличается в узлах. Как я могу повторно использовать существующие элементы управления узлами для воссоздания своих ячеек при прокруткеВиртуализированные элементы управления JavaFX используют
ответ
Ответ 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 Devs знают, что, например, , мы использовали бы StringBuilder для конкатенации String, особенно в тех случаях, когда код будет выполняться очень часто. Если вам нужен сложный рендеринг, вы можете создать этот рисунок с дополнительными узлами и установить их как свойство графики с помощью 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);
}
}
};
}
});
Во втором коде мы создаем и уничтожаем контроль над метками всякий раз, когда прокручиваем или изменяем элементы. Есть ли способ кэшировать этот элемент управления для повторного использования? –
- 1. Что такое «виртуализированные элементы управления»? (упоминается в документации JavaFX).
- 2. Как VirtualizationStackPanel решает, когда выгружать (удалять?) Виртуализированные элементы управления?
- 3. WPF MVVM Элементы управления неправильно используют ViewModel
- 4. Элементы управления .NET Winforms используют MSCOMCTL.OCX?
- 5. JavaFX - Как создать простые пользовательские элементы управления?
- 6. JavaFx - Исключить элементы управления от получения фокуса
- 7. Вложенные элементы управления JavaFX, как получить выбор?
- 8. Какие элементы управления .NET не используют javascript для обработки событий?
- 9. Почему элементы управления WinForms/WPF не используют Invoke внутри?
- 10. реагируют виртуализированные данные таблицы Пример
- 11. JavaFX 2.0: добавление текстовых сдвигов Другие элементы управления
- 12. Встроенные элементы управления JavaFX 2.2 не имеют стиля по умолчанию
- 13. javafx listview и элементы управления treeview не перекрашены правильно
- 14. Добавить пользовательские элементы управления JavaFX в Scene Builder
- 15. JavaFX 2.X - Анимированный фон и анимированные элементы управления
- 16. использовать элементы управления из другого вида/контроллера в JavaFX 8
- 17. Почему JavaFX размывает элементы управления и как его исправить?
- 18. Элементы измененного события для JavaFX Элемент управления ListView
- 19. Как добавить элементы управления в Borderpane в Javafx?
- 20. JAVAFX - FXML - Доступные элементы управления FXML от родительского контроллера
- 21. (JavaFX) Невозможно использовать элементы управления при привязке textProperty()?
- 22. Вкладки JavaFX и область управления
- 23. Частичные элементы управления MVC
- 24. Элементы управления панелью управления
- 25. Панель управления JavaFX Сетка
- 26. JavaFX PieChart: размер управления
- 27. Локализация элементов управления JavaFx
- 28. Dispose Метод управления JavaFX
- 29. Элементы узла HTML JavaFX
- 30. JavaFx - Когда создаются элементы
Какие ячейки? Вы используете TableView? – VGR
Если только текст отличается, то ваш тип данных для 'ListView' должен быть' String', а 'items' для представления списка должен содержать только 5000 строк. Затем используйте фабрику ячеек, чтобы настроить отображение. Трудно ответить на ваш вопрос, кроме этого, без каких-либо подробностей и некоторого кода: вы можете захотеть [изменить] свой вопрос, чтобы предоставить это. –