gpt4 book ai didi

java - 为什么我的背景颜色超出了 Javafx FXML 应用程序中节点的大小?

转载 作者:行者123 更新时间:2023-11-28 06:30:43 27 4
gpt4 key购买 nike

我的场景是:

Scene scene = new Scene(root, 320, 220);

在 FXML 中,网格 Pane 是:

<GridPane fx:id="base"
alignment="CENTER"
maxHeight="200.0"
maxWidth="300.0"
stylesheets="@style.css"
vgap="0" xmlns="http://javafx.com/javafx/8"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="sample.Controller">
...

网格面板的 CSS:

-fx-background-color: red;

尽管我的网格 Pane 的最大高度和宽度分别为 200 和 300,但背景超出了覆盖整个场景的范围。我将背景设为红色以使其明显。 Picture here

有人能解释一下吗?以及如何使背景仅限于网格而不是整个场景?

最佳答案

Scene 不执行任何布局。 Scene 的根将填充 Scene 的尺寸,而不管已设置的任何最大(或最小)大小。所以这里发生的并不是“背景颜色超出节点的大小”,而是节点正在填充场景(并且尺寸大于您设置的最大尺寸)。基本上,没有任何东西可以管理您的 GridPane 的大小并确保它不会超出您为其设置的最大大小。

为确保您的 maxWidthmaxHeight 得到遵守,您需要将网格 Pane 放置在将执行布局的布局 Pane 中,并注意这些属性。所以你可以这样做:

Scene scene = new Scene(new StackPane(root), 320, 220);

这会将 GridPane(root)放置在 StackPane 中。 StackPane 管理 root 的布局并确保它不会增长到超过您设置的最大大小。

如果您愿意,您当然可以在 FXML 中包含 StackPane(或您选择管理 GridPane 的任何内容)。

也许跑题了,但是如果你希望在网格面板和它周围的任何东西之间有一个间隙,你可以考虑纯粹在你的 CSS 中这样做:

#base {
-fx-background-color: transparent, red ;
-fx-background-insets: 0, 10 ;
-fx-padding: 10 ;
}

然后您可以将网格 Pane 直接添加到场景中,并且(当它仍然充满场景时)它的边缘周围有一个 10 像素的透明边框。

请注意,当您调整窗口大小时,CSS 解决方案的行为与第一个解决方案不同,因此它们并不等同。

关于java - 为什么我的背景颜色超出了 Javafx FXML 应用程序中节点的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34989117/

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