我在项目中使用JavaFX而不是Swing,因为增强的多媒体,webviewer和使用视觉效果的可能性。但是,我从网络上发现的内容(http://docs.oracle.com/javafx/2/layout/jfxpub-layout.htm和其他人)中了解到, JavaFX 布局管理器专注于根据大小调整父级的大小内容,而 Swing 专注于根据父缩放内容,至少基于正在使用的Layout
。
现在我正在使用Accordion
和一些TitledPane
个孩子。其中一个包含GridPane
,原因很简单,这是我知道模仿GridLayout
的最佳方式(正如我在上一个问题中所学到的那样:JavaFX layout equivalent to GridLayout)。我想将TitledPane
的内容拆分为2行1列,每行的TitledPane
可用空间高度为50%(使用Stage
缩放{ {1}}),相当于Scene
内GridLayout(2,1)
所能完成的内容。为此,我使用BorderLayout.CENTER
添加了GridPane
个RowConstraint
,setPercentHeight(50)
添加了ColumnConstraint
个setPercentWidth(100)
。但是,我注意到内容正在适当地缩放网格,但网格没有占用TitledPane
中的所有可用空间(因为它显然不像BorderPane
的中心)。我还尝试使用setMaxWidth
来与父级进行内容扩展,但它似乎也不起作用(如此处所述:JavaFX: How to make my custom component use all available space from parent layout?)。即使这样,我是否需要在我的UI元素树中将最大宽度设置为EACH后代,以使它们全部缩放?
无论哪种方式,有没有人知道如何制作一个TitledPane
,其中有两个相等的空格,在另一个下方,与标题窗格的大小成比例?
答案 0 :(得分:10)
事实上,你的gridpane正在增长以填补其所有父母。 考虑下面的代码,我已经将一个背景颜色(红色)添加到gridpane以进行调试。
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将填充其所有父代(检查红色跨越titledpane内容)。
但是,gridpane的内容不会填满所有列。如果您尝试调整窗口大小,您将看到textareas的宽度与gridpane一起没有变化。 要解决这个问题,您需要告诉gridpane的第一列与gridpane本身一起增长。 这样做的方法是添加以下约束:
ColumnConstraints columnConstraints = new ColumnConstraints();
columnConstraints.setFillWidth(true);
columnConstraints.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().add(columnConstraints);