JavaFX 8.在BorderPane中调整SplitPane的大小

时间:2014-10-07 12:36:12

标签: java layout javafx javafx-8

我在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)可以。

为什么?

2 个答案:

答案 0 :(得分:3)

行。我发现了问题!

 minHeight="-Infinity" minWidth="-Infinity"
由Scene Builder生成的

是一个非常糟糕的主意!

以下代码

 minHeight="0" minWidth="0"

按预期工作!

因此,请勿对-InfinityminHeight使用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