可随父级进行缩放的JavaFX布局
我在一个项目中使用JavaFX而不是Swing,因为增强的多媒体、webviewer和使用视觉效果的可能性。然而,从我在web(和其他网站)上的发现中,我了解到,JavaFX版面管理器专注于根据内容的大小缩放父级的大小,而Swing专注于根据父级缩放内容,至少基于所使用的可随父级进行缩放的JavaFX布局,java,layout,user-interface,javafx,Java,Layout,User Interface,Javafx,我在一个项目中使用JavaFX而不是Swing,因为增强的多媒体、webviewer和使用视觉效果的可能性。然而,从我在web(和其他网站)上的发现中,我了解到,JavaFX版面管理器专注于根据内容的大小缩放父级的大小,而Swing专注于根据父级缩放内容,至少基于所使用的布局 现在我正在使用一个手风琴,里面有一些标题窗格的孩子。其中一个包含一个GridPane,原因很简单,这是我所知道的模拟GridLayout的最佳方法(正如我从前面的问题中学到的:)。我想将标题窗格的内容分成两行一列,每行的高
布局
现在我正在使用一个手风琴,里面有一些标题窗格
的孩子。其中一个包含一个GridPane
,原因很简单,这是我所知道的模拟GridLayout
的最佳方法(正如我从前面的问题中学到的:)。我想将标题窗格
的内容分成两行一列,每行的高度为标题窗格
中可用空间的50%(按阶段
或场景
缩放),相当于边框布局中的网格布局(2,1)
。为此,我添加了一个GridPane
,使用setPercentHeight(50)
添加了2个RowConstraint
s,使用setPercentWidth(100)
添加了1个columnstraint
。但是,我注意到内容与网格的比例适当,但是网格没有占用标题窗格
中的所有可用空间(因为它显然不像边框窗格
的中心)。我还尝试了使用setMaxWidth
使内容与父级一起缩放,但它似乎也不起作用(如这里所说:)。即使会,我是否需要在UI元素树中设置每个子代的最大宽度,以便所有子代都可以缩放
不管是哪种方式,有人知道如何制作一个标题窗格
,其中每个标题窗格下有两个相等的空间,并与标题窗格的大小成比例吗
事实上,您的网格窗格正在增长,以填充其所有父窗格。
考虑下面的代码,为了调试目的,我在GRIDANE中添加了一个背景颜色(红色)。p>
Accordion accordion = new Accordion();
TitledPane titledPane = new TitledPane();
titledPane.setText("Title");
GridPane gridPane = new GridPane();
gridPane.setStyle("-fx-background-color:red");
gridPane.add(new TextArea("Hello"), 0, 0);
gridPane.add(new TextArea("World"), 0, 1);
titledPane.setContent(gridPane);
accordion.getPanes().add(titledPane);
如果执行此代码,gridpane将填充其所有父项(检查标题窗格内容上的红色范围)
但是,gridpane的内容不会填充所有列。如果您尝试调整窗口的大小,您将看到文本区域的宽度不会随着网格窗格的变化而变化。
要解决这个问题,您需要告诉gridpane的第一列与gridpane本身一起增长。
方法是添加以下约束:
ColumnConstraints columnConstraints = new ColumnConstraints();
columnConstraints.setFillWidth(true);
columnConstraints.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().add(columnConstraints);
你能告诉我setPercentWidth(100)和setFillWidth(true)+setHgrow(Priority.ALWAYS)之间的区别吗?setPercentWidth也可以工作,而不是setHgrow(Priority.ALWAYS)。如果您只使用一列,它们将执行相同的操作。如果您有多个列,它们的工作方式会有所不同。因为setHGrow将尝试告诉布局gridpane的哪一列需要增长以填充无人认领的可用空间。setFillWidth(true)用于列的内容,而不是列本身。我认为默认值是正确的。所以你不需要设置它。这意味着是否会调整列的子项以填充列的所有宽度。setFillWidth有多深?例如,如果我把一个VBox添加到一个列中,我猜Vbox会占用这个空间,但是需要使用SETMAXFIDENT(双.Max值)来单独地缩放按钮?如果你被卡住了,并且想要强制内容在它的父母中生长,考虑把这些内容包装在一个锚点中。