Layout JavaFX8 maxWidth是否被忽略? 忽略JavaFX8最大宽度

Layout JavaFX8 maxWidth是否被忽略? 忽略JavaFX8最大宽度,layout,javafx-8,Layout,Javafx 8,对于内容较宽的HBox子级,将忽略maxWidth 例如,下面的中心窗格太大,在右列(窗格)下方延伸: 没有冲突的CSS,例如定义百分比或以其他方式设置内容宽度 如何使maxWidth成为硬限制? 是否有一种方法可以使JavaFX在每次子内容更改时重新计算子窗格的大小,而不会超过父窗格的最大宽度?来源: 此类可直接用于需要绝对定位子对象的情况,因为它除了将可调整大小的子对象调整为其首选大小之外,不会执行布局。应用程序负责定位子项,因为在布局过程中,窗格会单独保留这些位置 因此,您无法通过将基

对于内容较宽的HBox子级,将忽略maxWidth

例如,下面的中心窗格太大,在右列(窗格)下方延伸:


没有冲突的CSS,例如定义百分比或以其他方式设置内容宽度

如何使maxWidth成为硬限制? 是否有一种方法可以使JavaFX在每次子内容更改时重新计算子窗格的大小,而不会超过父窗格的最大宽度?

来源:

此类可直接用于需要绝对定位子对象的情况,因为它除了将可调整大小的子对象调整为其首选大小之外,不会执行布局。应用程序负责定位子项,因为在布局过程中,窗格会单独保留这些位置

因此,您无法通过将基本窗格作为子窗格来实现目标。最好改用:

布局期间,stackpane的父级将在stackpane的可调整大小范围内调整stackpane的大小

stackpane的无限最大宽度和高度向父级表示,可以将其调整为超出其首选大小,以填充分配给它的任何空间

看看这个例子(我在StackPanes中添加了背景色,因为我使用SceneBuilder来测试行为),请告诉我它是否满足您的需要:

<HBox maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="1000.0" prefWidth="1236.0" style="-fx-background-color: lightblue;" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1">
  <children>
       <StackPane fx:id="leftPane" maxHeight="10000.0" maxWidth="120.0" minHeight="400.0" minWidth="100.0" prefHeight="10000.0" prefWidth="120.0" style="-fx-background-color: red;" />
       <StackPane fx:id="centerPane" maxHeight="10000.0" maxWidth="10000.0" minHeight="400.0" minWidth="120.0" prefHeight="10000.0" style="-fx-background-color: white;"> 
       <children>
        <Label prefWidth="999.0" text="Label of example. Label of example. Label of example. Label of example. Label of example. Label of example. Label of example. Label of example. Label of example. Label of example. Label of example. " />
     </children></StackPane>
       <StackPane fx:id="rightPane" maxHeight="10000.0" maxWidth="120.0" minHeight="400.0" minWidth="100.0" prefHeight="10000.0" prefWidth="120.0" style="-fx-background-color: green;" />
  </children></HBox>

也可以使用其他窗格或长方体组件

更新:

上一个示例使中心窗格根据其子窗格的宽度进行动态调整,如果需要,可以满足父窗格的要求,但决不能超过其最大宽度。因此,如果希望窗格始终填充其父窗格的宽度,则必须在中心窗格中添加足够大的首选宽度

<StackPane fx:id="centerPane" maxHeight="10000.0" minHeight="400.0" prefHeight="10000.0" prefWidth="1000.0"/>

要使容器根据其子容器大小自动调整大小,请使用
javafx
常量,如:

centerPane.setMinWidth(Control.USE_PREF_SIZE);

完美的通过添加到中心窗格
prefWidth=“9999”
,它将填充两侧立柱之间的水平空间!啊,我明白了。你是用孩子的标签做的。在这种情况下,最好将其放在父级(中心窗格)上,这样无论子级的宽度如何,中心列的大小总是尽可能宽。哦,我误解了你的部分问题。我认为您希望根据子窗格的功能动态更改中心窗格的宽度,因此,如果没有子窗格超过该大小,则不会更改其首选宽度。由于您希望使中心窗格尽可能宽,因此您之前的评论非常恰当!是否没有设置使窗格符合maxWidth(因此无需将所有内容包装在StackPane中)?您可以通过始终考虑其父级及其兄弟级的大小来强制窗格的最小、最大和首选大小,但任何超出父级中所需最大大小的更改都不会保留您的方案。如果你真的需要使用窗格而不是框或其他类型的窗格,因为这些组件提供了比它们的基本组件更大的通用性:
centerPane.setMinWidth(Control.USE_PREF_SIZE);