JavaFX:如何居中TilePane,但从左到右放置TilePane子代?

时间:2018-07-11 07:00:30

标签: java javafx javafx-8

根据标题的建议,我正在尝试将print()放在其父容器的中心,但同时,我希望TilePane的子节点从左侧开始放置,向右。

TilePane

这将创建一个像这样的窗口:

On launch

增加窗口宽度会导致以下情况:

Increased width

继续增加窗口高度会导致以下情况:

Increased height

设置@Override public void start(final Stage primaryStage) throws Exception { final VBox root = new VBox(); final Scene sc = new Scene(root); primaryStage.setScene(sc); final TilePane tp = new TilePane(); root.getChildren().add(tp); tp.setPrefColumns(3); tp.setAlignment(Pos.TOP_LEFT); tp.setStyle("-fx-background-color: green;"); root.setAlignment(Pos.CENTER); root.setFillWidth(true); Stream.iterate(0, i -> i + 1).limit(5).forEach(i -> { Region r = new Region(); r.setPrefSize(200, 200); r.setStyle("-fx-background-color: red; -fx-border-color: blue; -fx-border-width: 1;"); tp.getChildren().add(r); }); primaryStage.show(); } 会导致:

Fill width = false

我该怎么做以确保整个root.setFillWidth(false)保持居中,而TilePane子节点继续从每行的左侧开始放置?

更新

为了更清楚一点,Region在调整大小时应尝试除顶部行以外的所有行中容纳尽可能多的图块(此示例中的区域)。换句话说,第一行的右侧不应有任何绿色空间。或者,左侧和右侧的绿色空间应相等。此外,磁贴必须从左到右放置。设置TilePane会将任何“剩余”图块放置在最后一行的中心,这是不可接受的。

1 个答案:

答案 0 :(得分:2)

通过TilePane设置图块的首选大小。通过将TilePane设置为fillWidth并使用false的{​​{1}}属性的侦听器来设置{ width属性:

VBox

由OP更新

我为这种方法感到惊讶,并且尝试了一些更加动态的方法。

prefColumns

这无需为每个图块设置静态宽度/高度。

尽管此操作在此基本示例中有效,但我仍在更复杂的tile子级上进行了尝试。