Я использую ScrollPane в своем приложении JavaFX. Панель прокрутки имеет TilePane в качестве содержимого, отображающего тысячи плиток. Скаллинг слишком медленный. Как увеличить прокрутку ScrollPane? Спасибо.
Как увеличить прокрутку ScrollPane в JavaFX?
Ответы (1)
Обновление – рекомендуемый подход – используйте ControlsFX GridView
Проект ControlsFX, сторонний проект элементов управления JavaFX, выглядит так, как будто в нем есть элемент управления, соответствующий вашим требованиям. ControlsFX называет элемент управления GridView
. Это виртуализированный элемент управления, рекомендованный в решении в этом ответе, но он поставляется предварительно созданным, поэтому вам не нужно реализовывать собственный элемент управления или сильно настраивать ListView, чтобы получить такое поведение.
Вот описание GridView (из его Javadoc):
GridView — это виртуализированный элемент управления для отображения getItems() в визуальном, прокручиваемом, сеточном виде. Другими словами, в то время как ListView показывает одну ListCell на строку, в GridView будет ноль или более экземпляров GridCell в одной строке. Этот подход означает, что количество созданных экземпляров GridCell будет значительно меньше, чем количество элементов в списке элементов GridView, поскольку для видимой области GridView создается только достаточное количество GridCell. Это помогает повысить производительность и уменьшить потребление памяти.
Поскольку каждая GridCell расширяется из Cell, в GridView применяется тот же подход к фабрикам ячеек, что и в других элементах управления пользовательского интерфейса. Это имеет два основных преимущества:
- GridCells создаются по запросу и без участия пользователя,
- GridCells могут быть произвольно сложными. Простой элемент GridCell может иметь просто установленное свойство text, тогда как более сложный элемент GridCell может иметь произвольно сложный набор сцен внутри своего графического свойства (поскольку он принимает любой узел).
Устаревший ответ
Вместо использования TilePane для содержимого, рассмотрите возможность использования ListView, который является виртуализированным компонентом (например, он создает и отображает только те узлы, которые видны на экране, а не все возможные узлы). Пока вы реализуете это правильно, это, вероятно, будет более эффективным, чем один большой TilePane с тысячами узлов. Если ListView вам не совсем подходит, вы можете использовать концепции в ListViewSkin (вы можете проверьте исходный код приложения), чтобы создать свой собственный аналогичный виртуализированный макет для вашего приложения (хотя не ожидайте, что это будет особенно легко сделать).
как изменить ориентацию ListView?
список .setOrientation(Ориентация.ГОРИЗОНТАЛЬНО)
Но, может быть, ваш вопрос не об ориентации (сейчас я немного не понимаю, о чем вы на самом деле спрашиваете).
Возможно, вы хотите создать обычный вертикально ориентированный ListView из пользовательских объектов Row, где каждая строка будет состоять из HBox или одной строки TilePane. По сути, вам нужно будет проделать больше работы, чтобы получить желаемую производительность, вы не найдете готового элемента управления, который будет делать именно то, что вы хотите, и работать хорошо.
К сожалению, предоставление полного примера кода для полного решения вашей проблемы выходит за рамки разумных возможностей ответа StackOverflow.