JavaFX场景生成器:在调整大小时,将包裹在滚动窗格中的gridpane保留在角落中

时间:2017-05-15 13:29:00

标签: javafx fxml scenebuilder

我正在创建一个显示图像映射的UI,将其包装到一个锚定窗格中,它自身被包裹在一个滚动窗格中。我想在左下角添加一个叠加层,显示坐标。即使在调整视图大小并左右滚动地图时,此叠加层当然也必须可见。 我试图在锚定窗格中使用约束,但是向右滚动地图时坐标字段会消失。 在这里,您可以看到我的层次结构视图以及我希望该字段保留的位置: scene builder view 谢谢你的答案。

1 个答案:

答案 0 :(得分:0)

SplitPane
  └AnchorPane
    ├ScrollPane
    │  └... 
    └Label(etc)

要重叠标签,我建议使用上述结构。这是因为标签不在视口中,使视口变焦和变换更容易。

考虑到水平ScrollBar不可见的情况,标签的LayoutY应使用绑定进行计算。

// These can be set in Scene Builder
anchorPane.getChildren().addAll(scrollPane, label);
AnchorPane.setTopAnchor(scrollPane, 0.0);
AnchorPane.setLeftAnchor(scrollPane, 0.0);
AnchorPane.setRightAnchor(scrollPane, 0.0);
AnchorPane.setBottomAnchor(scrollPane, 0.0);
AnchorPane.setLeftAnchor(label, 0.0);

// Bind LayoutY of Label
DoubleBinding labelLayoutYBinding = Bindings.createDoubleBinding(
        () -> scrollPane.getViewportBounds().getHeight() - label.getHeight(),
        label.heightProperty(),
        scrollPane.viewportBoundsProperty());
labelLayoutYBinding.addListener((o, ov, nv) -> label.setLayoutY(nv.doubleValue()));

如果水平ScrollBar始终显示在您的应用程序中,则在Scene Builder中设置固定的底部偏移量比使用绑定更容易。

// This can be set in Scene Builder
AnchorPane.setBottomAnchor(label, 13.0); // Set the fixed value to ease up