gpt4 book ai didi

随父级缩放的 JavaFX 布局

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:43:32 27 4
gpt4 key购买 nike

我在项目中使用 JavaFX 而不是 Swing,因为它具有增强的多媒体、网络查看器和使用视觉效果的可能性。但是,我从网上(http://docs.oracle.com/javafx/2/layout/jfxpub-layout.htm 和其他)上了解到的是,JavaFX 布局管理器专注于根据内容,而 Swing 侧重于根据父级缩放内容,至少基于所使用的布局。 p>

现在我正在使用 Accordion 和一些 TitledPane child 。其中之一包含一个 GridPane,原因很简单,这是我所知道的模拟 GridLayout 的最佳方式(正如我从上一个问题中了解到的:JavaFX layout equivalent to GridLayout)。我想将 TitledPane 的内容分成 2 行和 1 列,每行的高度为 TitledPane 中可用空间的 50%(使用 StageScene),相当于 BorderLayout.CENTER 中的 GridLayout(2,1) 将完成的工作。为此,我添加了一个 GridPane,其中 2 个 RowConstraint 使用 setPercentHeight(50) 和 1 个 ColumnConstraint 设置百分比宽度(100)。但是,我注意到内容随网格正确缩放,但网格并未占用 TitledPane 中的所有可用空间(因为显然它不像 BorderPane 的中心)。我也尝试过使用 setMaxWidth 来使内容与父级一起缩放,但它似乎也不起作用(如此处所述:JavaFX: How to make my custom component use all available space from parent layout?)。即使可以,我是否需要将最大宽度设置为我的 UI 元素树中的每个后代以使它们全部缩放?

无论哪种方式,有没有人知道如何制作一个 TitledPane,其中 2 个相等的空间彼此下方,并随着 titledpane 的大小缩放?

column width does not take up all available space

最佳答案

事实上,您的网格 Pane 正在增长以填充其所有父级。考虑下面的代码,为了调试目的,我在网格 Pane 中添加了背景色(红色)。

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);

如果执行此代码,网格 Pane 将填充其所有父项(检查整个标题 Pane 内容的红色跨度)。

但是,网格面板的内容不会填满所有的列。如果您尝试调整窗口大小,您会看到文本区域的宽度没有随着网格 Pane 的变化而变化。要解决这个问题,您需要告诉网格 Pane 的第一列随网格 Pane 本身一起增长。这样做的方法是添加以下约束:

ColumnConstraints columnConstraints = new ColumnConstraints();
columnConstraints.setFillWidth(true);
columnConstraints.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().add(columnConstraints);

关于随父级缩放的 JavaFX 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19174983/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com