Javafx 玻璃窗格中的层布局未按预期工作

Javafx 玻璃窗格中的层布局未按预期工作,javafx,gluon,gluon-mobile,Javafx,Gluon,Gluon Mobile,我在玻璃窗格中安装了一个层,如下所示: MobileApplication.getInstance().getGlassPane().getLayers().add(myLayer); 现在,我希望myLayer的内容会像我在视图中添加一个层时一样排列在玻璃窗格的中心: view.getLayers().add(myLayer) 虽然“对齐”设置为“中心”,但我得到以下结果: 我注意到添加到glassPane的图层的layoutBounds都是“0”,而视图中图层的layoutBounds

我在玻璃窗格中安装了一个层,如下所示:

MobileApplication.getInstance().getGlassPane().getLayers().add(myLayer);
现在,我希望myLayer的内容会像我在
视图中添加一个层时一样排列在玻璃窗格的中心:

view.getLayers().add(myLayer)
虽然“对齐”设置为“中心”,但我得到以下结果:

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

此外,我不需要调用glion文档中所述的
layer.show()
(“然后通过调用show(),…)来实现显示一个层,因为该层在添加到一个层后会立即显示


我遗漏了什么吗?

我建议您查看详细的文档,而不仅仅是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(“我的层”)
显示该层,否则该层将被隐藏

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

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
,这样您就不必担心这些更低级的细节

我建议您查看详细的文档,而不仅仅是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(“我的层”)
显示该层,否则该层将被隐藏

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

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
,这样您就不必担心这些更低级的细节

正是我想要的。非常感谢!(我需要一个自定义ProgressIndicator的
层,但在Charm库中找不到合适的层)这正是我想要的。非常感谢!(我需要一个自定义ProgressIndicator的
层,但在Charm库中找不到合适的层)