1

大家好 !

我有一个简单的问题:我正在使用 FXML 文件并且我已经完成了这个布局:

我正在尝试扩展列 1(行跨度 3)内的 Scrollpane 的高度 网格容器

使用此层次结构:(顶部 GridPane 控制器被突出显示 - 它位于 VBox 内)

等级制度

和目标 ScrollPane 更近的视图: 在此处输入图像描述

我的问题是我正在向 ScrollPane 内的 GridPane 动态添加行(在另一个 GridPane 容器内);而且我不能添加超过 3 列(显然是 Vbox 容器的大小),但是如果我删除滚动窗格,我可以添加尽可能多的行,但行会消失,因为它们超出了 Vbox/GridPane 范围。 ..

是否可以做我不想做的事情(GridPane 在 ScrollPane 内,在多个 GridPane 行内)?我认为它会“开箱即用”,但似乎真的不是:-(

这是因为 ScrollPane Max/Min(我玩过所有大小的容器和/或顶级容器 -Vbox 和 ScrollPane- 都没有成功......)还是因为 GridPane 父级设置了最大高度并阻止了 ScrollPane 高度生长 ?

我已经尝试过这个帖子解决方案:如何滚动以使 ScrollPane 内容中的节点可见?没有任何成功:-(

有任何想法吗 ?向所有人致敬!

4

1 回答 1

3

回答“是否有可能做我想做的事(GridPane inside ScrollPane inside GridPane)”的帖子中间的问题!这是它的 fxml 代码(不要介意常量,我只是将它放在场景构建器中):

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

<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
  <columnConstraints>
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
  </columnConstraints>
  <rowConstraints>
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
  </rowConstraints>
<children><ScrollPane prefHeight="200.0" prefWidth="200.0">
<content><GridPane prefHeight="132.0" prefWidth="297.0">
  <columnConstraints>
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
    <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
  </columnConstraints>
  <rowConstraints>
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
    <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
  </rowConstraints>
</GridPane>
</content></ScrollPane>
</children>
</GridPane>

制作它的诀窍是让你有一个带有额外行/列的滚动条,而不会使所有现有的行变小,每次动态添加行时调整最里面的网格窗格的高度,这将确保网格窗格的大小滚动窗格,因此使滚动窗格“滚动”

例如(伪代码):

onButtonPress{
    resizeGridPane(sizeOfRow+paddingBetweenRows);
    AddRowInDesiredLocation(location);
}

我认为这会给你想要的效果。

编辑

在注意到您的 vbox 位于网格窗格内的滚动窗格内之后,您必须适当地调整 vbox 和网格窗格的大小以查看滚动窗格的“滚动”效果,如果您只调整网格窗格的大小,你只会得到连续越来越小的行。

于 2014-06-10T17:26:33.687 回答