【问题标题】:Layout of Layer in GlassPane not working as expectedGlassPane 中的图层布局未按预期工作
【发布时间】:2016-04-04 15:48:29
【问题描述】:

我像这样在GlassPane 中安装了一个层:

MobileApplication.getInstance().getGlassPane().getLayers().add(myLayer);

现在我希望 myLayer 的内容在 glassPane 的中心对齐,就像我向 View 添加图层时一样:

view.getLayers().add(myLayer)

虽然对齐设置为居中,但我得到以下结果:

我注意到添加到 glassPane 的图层的 layoutBounds 都是“0”,而视图中图层的 layoutBounds 与视图 layoutBounds 相同。

此外,我不需要像 gluon 文档中所述调用 layer.show()(“然后通过调用 show(), ... 来实现显示层),因为该层在它之后立即显示添加到图层。

我错过了什么吗?

【问题讨论】:

    标签: javafx gluon gluon-mobile


    【解决方案1】:

    我建议你看看详细的文档here,而不仅仅是JavaDoc。

    您将在此处找到有关如何添加和创建图层的更详细说明。

    首选方法是使用addLayerFactory(),例如:

    @Override
    public void init() {
        addViewFactory(BASIC_VIEW, () -> new BasicView(BASIC_VIEW));
    
        addLayerFactory("My Layer", () -> new SidePopupView(new StackPane(new Button("Side"))));
    }
    

    除非您使用MobileApplication.getInstance().showLayer("My Layer") 显示,否则该层将被隐藏。

    您可以创建自己的Layer 实现,例如:

    private class MyLayer extends Layer {
    
        private final Node root;
        private final double size = 150;
    
        public MyLayer() {
            root = new StackPane(new Button("A custom layer"));
            root.setStyle("-fx-background-color: white;");
            getChildren().add(root);
            getGlassPane().getLayers().add(this);
        }
    
        @Override
        public void layoutChildren() {
            root.setVisible(isShowing());
            if (!isShowing()) {
                return;
            }
            root.resize(size, size);
            resizeRelocate((getGlassPane().getWidth() - size)/2, (getGlassPane().getHeight()- size)/2, size, size);
        }
    }
    

    并将其也添加到工厂中:

    addLayerFactory("My Layer", () -> new MyLayer());
    

    但请注意,您必须调整大小并重新定位它,否则您将获得图片中的 0,0 位置,并注意其可见性。

    或者您可以使用内置层,例如SidePopupView,您无需担心这些更底层的细节。

    【讨论】:

    • 正是我想要的。非常感激! (我需要一个 Layer 用于自定义 ProgressIndicator,但在 Charm 库中找不到合适的)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    相关资源
    最近更新 更多