GridPane中ScrollPane内的JavaFX GridPane无法设置ScrollPane Growing

时间:2014-06-10 17:07:38

标签: javafx fxml scrollpane vbox gridpane

大家好!

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

我正在尝试扩展第1列(第3行)内Scrollpane的高度 GridContainer

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

Hierarchy

目标ScrollPane更近视图: enter image description here

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

是否可以做我不想做的事情(在多个GridPane行内的ScrollPane中的GridPane)?我认为它会起作用#34;开箱即用"但似乎真的不是: - (

这是因为ScrollPane Max / Min(我使用了所有大小的容器和/或顶级容器-Vbox和ScrollPane - 没有成功......)或者这是因为GridPane父级具有最大高度设置并且是阻止ScrollPane高度增长?

我尝试过这个解决方案:How to scroll to make a Node within the content of a ScrollPane visible?没有任何成功: - (

有什么想法吗?关心所有人!

1 个答案:

答案 0 :(得分:2)

回答帖子中间的问题“是否有可能做我想做的事(GridPane里面的ScrollPane里面的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>

制作它的技巧让你有一个带有额外行/列的滚动条而不会使所有现有的行变小,就是每次动态添加行时调整最里面的gridpane的高度,这样可以确保gridpane滚动窗格超出尺寸,因此滚动窗格“滚动”

类似(伪代码):

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

我认为这会给你带来理想的效果。

修改

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