java控制器
public class MainContentController implements Initializable {
@FXML private ScrollPane scrollPane;
public void initialize(URL arg0, ResourceBundle arg1) {
Random r = new Random();
JFXMasonryPane masonryPane = new JFXMasonryPane();
scrollPane.setContent(masonryPane);
scrollPane.setFitToWidth(true);
for (int i = 0; i < 6000; i++) {
Label lbl = new Label(String.valueOf(i));
lbl.setAlignment(Pos.CENTER);
lbl.setPrefSize(r.nextInt(200), r.nextInt(200));
lbl.setStyle("-fx-background-color:rgb(" + r.nextInt(255) + "," + r.nextInt(255) + "," + r.nextInt(255) + ");");
masonryPane.getChildren().add(lbl);
}
}
}
还有FXML
<GridPane xmlns="http://javafx.com/javafx/8.0.141" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainContentController">
<rowConstraints>
<RowConstraints percentHeight="20.0" />
<RowConstraints percentHeight="20.0" />
<RowConstraints percentHeight="20.0" />
<RowConstraints percentHeight="20.0" />
<RowConstraints percentHeight="20.0" />
</rowConstraints>
<columnConstraints>
<ColumnConstraints percentWidth="25.0" />
<ColumnConstraints percentWidth="25.0" />
<ColumnConstraints percentWidth="25.0" />
<ColumnConstraints percentWidth="25.0" />
</columnConstraints>
<children>
<ScrollPane fx:id="scrollPane" GridPane.columnSpan="4" GridPane.halignment="CENTER" GridPane.rowIndex="2" GridPane.rowSpan="3" GridPane.valignment="CENTER"/>
</children>
</GridPane>
尝试使用最简单的示例来说明我的意思。当您执行此代码时,它会像预期的那样生成6000个随机大小/颜色的块。但是,可能看到的数量取决于窗口的宽度,并且随着更改窗口的大小而变化。从理论上讲,这应该显示所有6000个块,并且如果您的窗口较窄,则只需要向下滚动即可,这是我的意图/目标。但是,在某种看似平稳的高度上,它只会截断其下方的任何物体。我找不到对它有任何影响的任何设置或方法。
通过JFoenix使用JFXMasonryPane。但是,我不确定这是否是他们的库或使用ScrollPane时遇到的问题。
答案 0 :(得分:1)
这是由于砖石窗格中的行数限制为100(这也是默认值)引起的。我认为您无法更改该行为,因为该限制是硬编码的,请参见例如https://github.com/jfoenixadmin/JFoenix/issues/302。 您可以使用setLimitRow方法更改值,但是所有大于100的值都将被忽略,并使用默认值/最大值100。
在您的示例中,标签数为6000。行数为100(如前所述,默认/最大值)。假设一个大窗口可以包含25列,则砖石窗格中的标签数为100 * 25 =2500。因此,无法显示6000-2500 = 3500的标签。减小窗口的宽度会减少列数,从而减少标签数。
如果涉及超过100个孩子/标签,则总是会出现此问题。在一列的情况下,最晚不会显示所有标签。
为便于说明,我使用您的代码段,但为简单起见,使用等号的正方形。以下两个屏幕截图(开始和结束)显示了一个带有25列的窗口的100 * 25 = 2500个标签(不显示6000-2500 = 3500个标签):
开始:
结束:
接下来的两个屏幕截图(开始和结束)显示了带有1列的窗口的100 * 1 = 100个标签(不显示6000-100 = 5900个标签):
开始和结束: