[英]JavaFX 8. Resize of SplitPane within BorderPane
我在通过.fxml定义的JavaFx 8中具有以下布局:
<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)可以。
为什么?
好。 我发现了问题!
minHeight="-Infinity" minWidth="-Infinity"
由Scene Builder生成是一个非常糟糕的主意!
以下代码
minHeight="0" minWidth="0"
可以正常工作!
因此,请勿对minHeight
或minWidth
使用-Infinity
常量。 0是您所需要的!
布局的大小不仅取决于其大小,还取决于容器(父项)/内容(子项)的大小
从文档
窗格的父级将在布局期间在窗格的可调整大小范围内调整窗格的大小。
SplitPane的大小取决于其Parent。 由于BorderPane
的Width
为1005.0,而Height
为730.0 。 SplitPane填充Parent(应该是)
尝试删除
prefHeight="730.0" prefWidth="1005.0"
从fxml上方的BorderPane
中,您可以发现SplitPane的高度会降低。
为什么只有身高? 这是因为
<Pane fx:id="statusPane" prefHeight="30.0" prefWidth="1005.0" ..
强制BorderPane不减小其宽度。
父母必须根据其子女的大小自行调整大小。
简而言之,如果不确定窗口的大小,请不要在布局中指定prefHeight
或prefWidth
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.