当前位置: 首页 > 知识库问答 >
问题:

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

佴德曜
2023-03-14

我正在用JavaFX写一个程序

硼烷-

我希望能够添加尽可能多的行到gridpane,并让scrollpane自动扩展自己。

注意:我有一些很长的文件,所以我只包括重要的部分。如果您需要整个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个答案

谭安翔
2023-03-14

您已将滚动窗格放置在VBox中。您应该将ScrollPane的vgrow优先级设置为priority。始终允许滚动窗格增长以填充VBox的可用区域。

您可以通过添加以下属性在FXML中做到这一点:

VBox.vgrow="ALWAYS"

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

VBox.setVgrow(scrollPane, Priority.ALWAYS);

另外,代码的另一个问题是,您正在将行动态地(在代码中的循环中)添加到网格窗格中。如果希望这样做,应该在FXML中定义RowConstraints(因为FXML不能包含可变数量的行)。而是在循环中应用行约束:

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

 类似资料:
  • 我正在尝试使图片适合JLabel。我希望将图片尺寸缩小到更适合我的Swing JPanel的尺寸。 我尝试使用setPreferredSize,但它不起作用。 我在想有没有一个简单的方法来做这件事?我应该为此缩放图像吗?

  • 下面是“DisplayImage”自定义面板相关部分的代码:

  • 我对JPanel和JFrame还是个新手,可能没有按照我应该的方式使用它们。我正在尝试创建Pong游戏,在创建JFrame并将JPanel添加到它之后,我可以调整JPanel的大小,但我不知道如何调整JFrame的大小以适应它。Game类扩展了JPanel。 主: 编辑: 将setSize更改为setPreferredSize,然后为JFrame调用pack()就可以解决所有问题。

  • 我有定义了left、right和top约束的NSTextField(没有设置bottom约束)。我需要NSTextField增长,如果内容不能容纳在其中,并减少大小,如果有未使用的空间。 现在我有了:如果NSTextField有多行文本或太多内容,它会以奇怪的行为自动扩展,而且NSTextField在窗口调整大小时不会减小自己的大小。 在Swift上,我还没有找到任何简单的解决方案来解决这个问题(

  • 如何让ImageView中的图像自动调整大小,使其始终适合父节点? 下面是一个小代码示例:

  • 我有一些问题与CSS为我的网页,显示社会媒体风格的帖子,包括图像。当显示图像时,它们被放置在div标记中,该标记的样式是尝试缩小图像的大小,并将图像horziont地相邻显示。 然而,我有一个问题,图像仍然试图堆叠在一起,我不能让他们调整我想要的大小,特别是在移动。目前基于其他线程,这是我得到的