当前位置: 首页 > 知识库问答 >
问题:

JavaFX布局,可随父级缩放

华欣怡
2023-03-14

我在一个项目中使用JavaFX而不是Swing,因为它增强了多媒体、html" target="_blank">webviewer和使用视觉效果的可能性。但是,我从web上(http://docs.oracle.com/JavaFX/2/layout/jfxpub-layout.htm等)找到的东西中学到的是,JavaFX布局管理器侧重于根据内容的大小缩放父级的大小,而Swing侧重于根据父级缩放内容,至少是根据正在使用的layout缩放内容。

现在我正在使用accordion和一些TitledPane子级。其中一个包含GridPane,原因很简单,这是我所知道的模拟GridLayout的最佳方法(正如我从前面的问题中学到的:与GridLayout等效的JavaFX布局)。我希望将TitledPane的内容拆分为2行1列,每行具有TitledPane可用空间的50%高度(使用StageScene缩放),这相当于BorderLayout.center中的GridLayout(2,1)所完成的功能。为此,我添加了一个GridPane,其中有2个RowConstraint使用SetPercentTheight(50),还有1个ColumnConstraint使用SetPercentWidth(100)。但是,我注意到网格的内容正在适当地缩放,但是网格并没有占用TitledPane中的所有可用空间(因为它的作用显然不像BorderPane的中心)。我还尝试使用setmaxwidth使内容与父级一起缩放,但似乎也不起作用(正如这里所说的:javafx:How to make my custom component use all available space from parent Layout?)。即使是这样,我是否需要在UI元素树中设置每个后代的最大宽度以使它们都缩放?

不管是哪种方式,有没有人知道如何创建一个titledpane,每个titledpane下面有两个相等的空格,并按titledpane的大小缩放?

共有1个答案

柯苗宣
2023-03-14

事实上,您的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);
 类似资料:
  • 问题内容: 由于增强的 多媒体功能,Webviewer和使用视觉效果的可能性,因此我在项目中使用JavaFX而不是Swing 。但是, 从网上 (http://docs.oracle.com/javafx/2/layout/jfxpub-layout.htm等)上 了解到的是JavaFX布局管理器专注于缩放父 基于所述内容的大小,而摇摆上论点集中缩放 根据父内容,至少基于所述Layout被 使用。

  • 我的JavaFX 8应用程序中有以下代码,用于控制添加到场景中的画布元素的变换比例: 问题是,就像它所说的,附加到转换中,并且由于浮点精度,每次滚动时缩放级别都会略有不同。 由于某些原因,我必须修改图形上下文转换,而不是直接修改画布(换句话说,要进行翻译,我必须使用transform.setTx(…) 而不是画布。setTranslateX(…) 。 解决方案是设置转换的尺度,同时考虑枢轴点(即鼠

  • 主要内容:手风琴事件可以使用手风琴(accordion)控件对标题窗格进行分组。 上面的代码生成以下结果。 手风琴事件 当在手风琴中打开标题窗格时,手风琴的展开窗格属性会更改。 上面的代码生成以下结果。

  • 主要内容:创建标题窗格标题窗格是具有标题的面板,窗格可以打开和关闭。我们可以添加节点(如UI控件或图像)和一组元素到窗格。 上面的代码生成以下结果。 创建标题窗格 要创建一个控件,请调用其构造函数。 以下代码使用的两个参数构造函数。它将标题窗格命名为“我的窗格”,并用一个控件填充窗格。 接下来的几行做了与上面的代码相同的事情,但不使用带参数的构造函数。 它创建一个带有默认空构造函数的,然后再设置控件的标题和内容。 以下

  • 主要内容:创建滚动窗格,可滚动ScrollPane,滚动条策略,调整滚动窗格中的组件大小,滚动操作滚动窗口提供UI元素的可滚动视图。 我们使用可滚动面板,当需要显示有限的空间大内容。可滚动窗格视口,其将显示内容的一部分,并且在必要时提供滚动条。 上面的代码生成以下结果。 创建滚动窗格 以下代码使用文件创建一个图像,并将该图像添加到滚动窗格。如果图像较大,滚动窗格将显示滚动条,我们可以使用它来查看隐藏的部分。 可滚动ScrollPane 调用方法通过单击并移动鼠标光标来预览图像。 上面的代码生成

  • 主要内容:示例,示例2GridPane通常用于布局:第一列上的只读标签的输入表单和第二列上的输入字段。 GridPane可以在行,列或单元格级别指定约束。 例如,我们可以设置包含输入文本字段的第二列,以在窗口调整大小时调整大小。 示例 以下代码演示使用GridPane布局的简单表单应用程序。它有以下布局。 完整的代码实现如下所示 - 上面的代码生成以下结果。 示例2 以下是一个实现登录窗口的代码 - 上面的代码生成以下