我在JavaFx 8中通过.fxml定义了以下布局:
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="730.0" prefWidth="1005.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<top>
<Pane fx:id="statusPane" prefHeight="30.0" prefWidth="1005.0" BorderPane.alignment="CENTER" />
</top>
<center>
<SplitPane fx:id="mainPane" dividerPositions="0.2" prefHeight="700.0" prefWidth="1005.0" minHeight="-Infinity" minWidth="-Infinity" BorderPane.alignment="CENTER">
<items>
<ScrollPane fitToHeight="true" fitToWidth="true" hbarPolicy="ALWAYS" vbarPolicy="ALWAYS" minHeight="-Infinity" minWidth="-Infinity">
<content>
<AnchorPane fx:id="menuPane" prefHeight="700.0" prefWidth="200.0" minHeight="-Infinity" minWidth="-Infinity" />
</content>
</ScrollPane>
<ScrollPane fitToHeight="true" fitToWidth="true" hbarPolicy="ALWAYS" vbarPolicy="ALWAYS" minHeight="-Infinity" minWidth="-Infinity">
<content>
<AnchorPane fx:id="formPane" prefHeight="700.0" prefWidth="800.0" minHeight="-Infinity" minWidth="-Infinity"/>
</content>
</ScrollPane>
</items>
</SplitPane>
</center>
</BorderPane>
我不明白为什么当用户在运行时调整BorderPane大小时,SplitPane不能小于1005x700。 SplitPane可以大于1005x700,这很好,但它不能小于prefHeight和prefWidth,认为应用程序窗口本身(BorderPane)可以。
为什么?
答案 0 :(得分:3)
行。我发现了问题!
minHeight="-Infinity" minWidth="-Infinity"
由Scene Builder生成的是一个非常糟糕的主意!
以下代码
minHeight="0" minWidth="0"
按预期工作!
因此,请勿对-Infinity
或minHeight
使用minWidth
常量。 0就是你所需要的!
答案 1 :(得分:1)
布局的大小不仅取决于其大小,还取决于容器(父级)/内容(子级)的大小
来自文档
窗格的父级将在布局期间调整窗格可调整大小范围内的窗格。
SplitPane的大小取决于其父级。由于Width
的{{1}} 1005.0 且BorderPane
730.0 。 SplitPane填充Parent(它应该是)
尝试删除
Height
从上面fxml中的prefHeight="730.0" prefWidth="1005.0"
,您可以发现SplitPane的高度会降低。
为什么只有身高?这是因为
BorderPane
强制BorderPane不减小它的宽度。
父母必须根据孩子的大小自行调整大小。
简而言之,如果您不确定窗口的大小,请不要为布局指定<Pane fx:id="statusPane" prefHeight="30.0" prefWidth="1005.0" ..
或prefHeight