根据标题的建议,我正在尝试将print()
放在其父容器的中心,但同时,我希望TilePane
的子节点从左侧开始放置,向右。
TilePane
这将创建一个像这样的窗口:
增加窗口宽度会导致以下情况:
继续增加窗口高度会导致以下情况:
设置@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();
}
会导致:
我该怎么做以确保整个root.setFillWidth(false)
保持居中,而TilePane
子节点继续从每行的左侧开始放置?
为了更清楚一点,Region
在调整大小时应尝试除顶部行以外的所有行中容纳尽可能多的图块(此示例中的区域)。换句话说,第一行的右侧不应有任何绿色空间。或者,左侧和右侧的绿色空间应相等。此外,磁贴必须从左到右放置。设置TilePane
会将任何“剩余”图块放置在最后一行的中心,这是不可接受的。
答案 0 :(得分:2)
通过TilePane
设置图块的首选大小。通过将TilePane
设置为fillWidth
并使用false
的{{1}}属性的侦听器来设置{ width
属性:
VBox
我为这种方法感到惊讶,并且尝试了一些更加动态的方法。
prefColumns
这无需为每个图块设置静态宽度/高度。
尽管此操作在此基本示例中有效,但我仍在更复杂的tile子级上进行了尝试。