JavaFX версия WPF UniformGrid?
Я начинаю с JavaFX для нового приложения и хочу получить макет на экране, идентичный UniformGrid в WPF. Есть TilePane, но он отличается (похоже на WrapPanel).
Мой подход до сих пор был бы (для коллекции [size = N], которую я хочу отобразить как "тайлы"):
- Используйте TilePane т.
- t.setPrefRows (ROUNDUP (sqrt (N)))
Это, вероятно, не лучший подход. Вы знаете лучшее решение? Может быть, изменяемый размер?
1 ответ
Похоже, вы хотите макет, который:
- Имеет фиксированное количество ячеек в каждом ряду.
- Каждый узел ячейки имеет одинаковую высоту и ширину.
Я не знаком с WPF или UniformGrid, но я думаю, что выше, что вы хотите.
TilePane скорее всего не подходит
Кажется, что TilePane подойдет для этого, но, как вы выяснили, он не демонстрирует такого поведения из коробки. Используя TilePane, вы устанавливаете предпочтительное количество строк, но при изменении размера TilePane количество строк и количество столбцов могут изменяться по мере того, как плитки переставляются в соответствии с доступной областью.
Используйте GridPane с настройками привязки и предпочтений или ограничениями
Чтобы получить фиксированное количество ячеек в строке, используйте GridPane. GridPane будет сохранять фиксированное количество строк и столбцов при изменении размера. Чтобы убедиться, что каждый узел ячейки имеет одинаковую высоту и ширину, вы можете прослушивать свойства высоты и ширины GridPane и, при изменении, устанавливать минимальные / максимальные / предпочтительные размеры дочерних элементов, чтобы они все имели одинаковый размер., Или установите некоторые ограничения на строки и столбцы GridPane, такие как setPercentWidth и setPercentHeight.
Чтобы продемонстрировать этот подход, образец ColorChooser предоставляет некоторый код для ColorChooser с изменяемым размером с фиксированным числом образцов цвета на строку сетки, и по мере того, как общая содержащая сетка увеличивается или уменьшается, образцы цветов растут и сжимаются, чтобы соответствовать доступной области как подходящее. Сами образцы цветов не обязательно поддерживают одинаковое соотношение высоты и ширины, но этого легко достичь, установив соответствующие минимальные / максимальные / предпочтительные размеры для дочерних элементов.
Создайте свой собственный макет
В качестве альтернативы использованию слушателей изменений и установки минимальных / максимальных / предпочтительных размеров для дочерних элементов, вы можете реализовать свой собственный менеджер макета, создав подклассы Pane для создания класса UniformGrid и реализации метода layoutChildren. В layoutChildren расположите размер и положение дочерних элементов UniformGrid по мере необходимости. Вы можете обратиться к исходному коду существующей панели, чтобы найти пример того, как создавать свои собственные макеты.
Расследование сторонних макетов
У проекта ControlsFX есть GridView или MigLayout, которые могут обеспечить функциональность UniformGrid.