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