Я использую JavaFX в проекте вместо Swing из-за улучшенного мультимедиа, веб-просмотра и возможности использовать визуальные эффекты. Однако то, что я узнал от того, что я нашел в Интернете (http://docs.oracle.com/javafx/2/layout/jfxpub-layout.htm и другие), что JavaFX менеджеры компоновки акцент на масштабирование размера родителя на основе размера содержимого, в то время как свинг сосредоточивается на , масштабируя содержимое в соответствии с родительским, по меньшей мере, на основе используемого Layout
.Макет JavaFX, который масштабируется с родителем
Сейчас я пользуюсь Accordion
с некоторыми детьми TitledPane
. Один из них содержит GridPane
по той простой причине, что это лучший способ, который я знаю, чтобы подражать GridLayout
(как я узнал из своего предыдущего вопроса здесь: JavaFX layout equivalent to GridLayout). Я хочу, чтобы раздел контента TitledPane
разбился на 2 строки и 1 столбец, каждая строка с 50% высоты доступного пространства в TitledPane
(масштабирование с помощью Stage
или Scene
), что эквивалентно тому, что GridLayout(2,1)
внутри BorderLayout.CENTER
достигнет , Для этого я добавил GridPane
с 2 RowConstraint
с использованием setPercentHeight(50)
и 1 ColumnConstraint
с setPercentWidth(100)
. Тем не менее, я заметил, что содержимое масштабируется с сеткой должным образом, но сетка не занимает все свободное место в TitledPane
(потому что, по-видимому, она не действует как центр BorderPane
). Я также пробовал с setMaxWidth
, чтобы сделать масштаб содержимого с родителем, но он, похоже, не работает (как сказано здесь: JavaFX: How to make my custom component use all available space from parent layout?). И даже если бы это было, мне нужно установить максимальную ширину для КАЖДОГО потомка в моем дереве элементов пользовательского интерфейса, чтобы все они масштабировались?
В любом случае, кто-нибудь знает, как сделать TitledPane
с 2 равными пробелами в нем под каждой другой, которые масштабируются с размером под названием pane?
Не могли бы вы сказать мне, что разница между setPercentWidth (100) и setFillWidth (истина) + setHgrow (Priority.ALWAYS)? – Warkst
setPercentWidth также будет работать, а не setHGrow (Priority.ALWAYS). Они оба сделают то же самое, если вы используете только один столбец. Если у вас несколько столбцов, они будут работать по-другому. Потому что setHGrow попытается сказать макет, который столбец gridpane должен вырасти, чтобы заполнить невостребованное доступное пространство. – Rasha
setFillWidth (true) предназначен для содержимого столбца, а не для самого столбца. По умолчанию это правда. Поэтому вам не нужно его устанавливать. Это означает, будут ли отрегулированы дети столбца, чтобы заполнить всю ширину столбца. – Rasha