首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GlassPane中的层布局不像预期的那样工作

GlassPane中的层布局不像预期的那样工作
EN

Stack Overflow用户
提问于 2016-04-03 21:58:08
回答 1查看 182关注 0票数 1

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

代码语言:javascript
复制
MobileApplication.getInstance().getGlassPane().getLayers().add(myLayer);

现在,我希望myLayer的内容会在glassPane的中心被合并,就像我在View中添加一个层一样。

代码语言:javascript
复制
view.getLayers().add(myLayer)

尽管将对齐设置为中心,但我得到了以下结果:

我注意到添加到glassPane中的层的layoutBounds为"0",而视图中的层的layoutBounds与视图layoutBounds相同。

此外,我不需要像胶子文档中所述那样调用layer.show() (“然后通过调用show()、.”来实现层的显示),因为该层在添加到层后立即显示。

我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-03 22:57:34

我建议您查看详细的文档这里,而不仅仅是JavaDoc。

在这里,您将找到一个更详细的解释,如何添加和创建层。

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

代码语言:javascript
复制
@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实现,例如:

代码语言:javascript
复制
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);
    }
}

把它加到工厂里:

代码语言:javascript
复制
addLayerFactory("My Layer", () -> new MyLayer());

但请注意,您将不得不调整大小和重新定位,否则您将得到0,0的位置,如您的图片,并照顾它的可见度。

或者你可以使用内置层,比如SidePopupView,你不需要担心这些更低层次的细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36391729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档