如何让StackPane占据窗口的垂直高度?

时间:2017-08-09 14:04:24

标签: java javafx fxml borderpane

我正在尝试使StackPane位于我的主BorderPane的<left>元素中,占据窗口的完整垂直高度,即使它已调整大小。我怎样才能做到这一点?这是我到目前为止所得到的:

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

<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.ToolBar?>
<?import javafx.scene.Group?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.*?>

<VBox prefWidth="800.0" prefHeight="600.0" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1">
    <VBox alignment="TOP_CENTER">
        <ToolBar minHeight="50.0" prefHeight="50.0" prefWidth="800.0" stylesheets="@style.css" GridPane.rowIndex="1">
            <ImageView fitHeight="35.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true">
                <Image url="@react-toolbar-logo.png"/>
            </ImageView>
        </ToolBar>
        <MenuBar fx:id="menuBar" prefHeight="0.0" prefWidth="0.0"/>
    </VBox>

    <BorderPane xmlns:fx="http://javafx.com/fxml">

        <left>
            <StackPane prefWidth="230">
                <ListView fx:id="listView"/>
            </StackPane>
        </left>
        <right>
            <StackPane>
                <ScrollPane>
                    <Group fx:id="selectionGroup">
                        <ImageView fx:id="mainImageView"/>
                    </Group>
                </ScrollPane>
            </StackPane>
        </right>

    </BorderPane>
</VBox>

3 个答案:

答案 0 :(得分:3)

堆栈窗格(以及ListView:我不确定为什么需要将ListView包裹在StackPane中已经 >填充边框窗格的整个高度。你可以看到这个,例如通过更改边框窗格的背景颜色。问题是边框窗格没有增长以填充周围VBox中的所有可用空间。

如果您想让BorderPane填充剩余空格,请将其VBox.vgrow属性设置为ALWAYS

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

<?import javafx.scene.control.ListView?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.ToolBar?>
<?import javafx.scene.Group?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.*?>
<?import java.lang.Double?>

<VBox prefWidth="800.0" prefHeight="600.0" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1">

    <VBox alignment="TOP_CENTER">
        <ToolBar minHeight="50.0" prefHeight="50.0" prefWidth="800.0" GridPane.rowIndex="1">
            <ImageView fitHeight="35.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true">
                <Image url="@react-toolbar-logo.png"/>
            </ImageView>
        </ToolBar>
        <MenuBar fx:id="menuBar" prefHeight="0.0" prefWidth="0.0"/>

    </VBox>

    <BorderPane VBox.vgrow="ALWAYS">

        <left>
            <StackPane prefWidth="230">
                <ListView fx:id="listView" />
            </StackPane>

        </left>
        <right>
            <StackPane>
                <ScrollPane>
                    <Group fx:id="selectionGroup">
                        <ImageView fx:id="mainImageView"/>
                    </Group>
                </ScrollPane>
            </StackPane>
        </right>

    </BorderPane>

</VBox>

答案 1 :(得分:2)

绑定相应的值。如果您希望让子项始终填充其父项的大小,则可以将子项的library("data.table") r <- range(which(rleid(A>B)==2)) r[1] ## begin r[2] + 1 ## end 绑定到其父项的prefHeightProperty。 这在像

这样的java代码中是可能的

heightProperty

或像fxml一样

child.prefHeightProperty().bind(parent.heightProperty);

查看Oracle's description about bindings…

答案 2 :(得分:1)

听起来就像你想重新构建你的布局一样,但我认为你可能需要明确说明你所追求的是什么。

import FBSignInButton from 'vue-facebook-signin-button'

export default {
   ...,
   components: {
     ...,
     FBSignInButton
   },
   ...
}