JavaFx布局missbeheavior与首选大小和最小尺寸

时间:2018-02-17 21:05:24

标签: javafx layout resize fxml

免责声明:我是JavaFx初学者,来自wpf世界

我对首选高度和最大高度的行为有疑问。忽略最小高度并使用首选高度。我错了什么?

代码示例:(这只是为了说明问题)

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>

<VBox fx:controller="sample.Controller" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Pane minHeight="100.0" style="-fx-background-color: lightblue;" VBox.vgrow="ALWAYS" />
      <Pane fx:id="buttonPane" style="-fx-background-color: lightgreen;">
         <children>
            <Button minHeight="0.0" minWidth="0.0"  onAction="#buttonPaneClick" prefHeight="200.0" text="Button" />
         </children>
      </Pane>
   </children>
</VBox>

enter image description here

问题:按钮只显示了一半而没有按比例缩小。但最小高度为0所以我希望按钮变为0,当没有更多的地方可用但他被裁剪出来。

1 个答案:

答案 0 :(得分:1)

来自Pane documentation

  

此类可以直接用于需要儿童绝对定位的情况,因为除了将可调整大小的儿童调整为其首选尺寸之外,它不会执行布局。

(我的重点)。

所以包含按钮的Pane无论如何都会将其大小调整为首选大小。如果将包含按钮的窗格替换为布局容器,布局容器的布局多于此布局(例如HBox),那么您将看到您期望的行为:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>

<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <Pane minHeight="100.0" style="-fx-background-color: lightblue;" VBox.vgrow="ALWAYS" />
      <HBox fx:id="buttonPane" style="-fx-background-color: lightgreen;">
         <children>
            <Button minHeight="0.0" minWidth="0.0"  prefHeight="200.0" text="Button" />
         </children>
      </HBox>
   </children>
</VBox>