Scrollpane不会调整大小以适应gridpane JavaFX

时间:2017-02-02 22:25:57

标签: java intellij-idea javafx fxml

我正在使用JavaFX编写程序

Borderpane - >中心 - > VBox - > ScrollPane-> Gridpane

我希望能够在网格窗格中添加尽可能多的行,并让滚动窗口自动扩展。

注意:我有一些很长的文件,所以我只包含了重要的部分。如果您需要整个FXML或Controller文件,请给我留言。

这是我的gridpane / scrollpane的FXML:

<BorderPane>        
<center>
<VBox>
<children>
<ScrollPane fx:id="messageScrollPane" vbarPolicy="ALWAYS" hbarPolicy="NEVER" hmax="0.0" vmax="0.0">
<content>
<GridPane fx:id="messageBox" prefHeight="540.0" prefWidth="589.0">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="Infinity" minHeight="10.0" prefHeight="30.0" vgrow="ALWAYS" />
<RowConstraints maxHeight="Infinity" minHeight="10.0" prefHeight="30.0" vgrow="ALWAYS" />
<RowConstraints maxHeight="Infinity" minHeight="10.0" prefHeight="30.0" vgrow="ALWAYS" />
<RowConstraints maxHeight="Infinity" minHeight="10.0" prefHeight="30.0" vgrow="ALWAYS" />
<RowConstraints maxHeight="Infinity" minHeight="10.0" prefHeight="30.0" vgrow="ALWAYS" />
<RowConstraints maxHeight="Infinity" minHeight="10.0" prefHeight="30.0" vgrow="ALWAYS" />
<RowConstraints maxHeight="Infinity" minHeight="10.0" prefHeight="30.0" vgrow="ALWAYS" />
</rowConstraints>
</GridPane>
</content>
</ScrollPane>
</children>
</VBox>
</center>
</BorderPane>

我的控制器里面有以下代码用于FXML

  @FXML
private GridPane messageBox;

 if (me.getMail().size() > 0) {
                                for (int i = 0; i < me.getMail().size(); i++) {
                                    messageBox.add(new Label(me.getMail().get(i).toString()), 0, rowNum);
                                    rowNum++;
                                }
                            }

谢谢大家的帮助!

赖安

1 个答案:

答案 0 :(得分:0)

您已将ScrollPane放在VBox内。您应该{ScraPane set the vgrow priority Priority.ALWAYS以允许ScrollPane增长以填充VBox的可用区域。

您可以通过添加以下属性在FXML中执行此操作:

<div id="block1">
  <div id="one">LEFT SIDE</div>
  <div id="two">RIGHT TOP</div>
  <div id="three">RIGHT BOTTOM</div>
</div>

<div id="block2">
  BELOW
</div>

VBox.vgrow="ALWAYS" 元素

或者,您可以通过以下代码执行此操作:

<ScrollPane VBox.vgrow="ALWAYS" ...>

此外,您的代码的另一个问题是您要在网格窗格中动态添加行(在代码中循环中)。如果您希望这样做,则应在FXML中定义VBox.setVgrow(scrollPane, Priority.ALWAYS); (因为FXML不能包含可变数量的行)。相反,在循环中应用行约束:

RowConstraints