免责声明:我是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>
问题:按钮只显示了一半而没有按比例缩小。但最小高度为0所以我希望按钮变为0,当没有更多的地方可用但他被裁剪出来。
答案 0 :(得分:1)
此类可以直接用于需要儿童绝对定位的情况,因为除了将可调整大小的儿童调整为其首选尺寸之外,它不会执行布局。
(我的重点)。
所以包含按钮的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>