我在GlassPane
中安装了一个图层:
MobileApplication.getInstance().getGlassPane().getLayers().add(myLayer);
现在我希望myLayer的内容可以在glassPane的中心分配,就像我在View
添加图层时一样:
view.getLayers().add(myLayer)
虽然对齐设置为居中,但我得到以下结果:
我注意到添加到glassPane的图层的layoutBounds是" 0",而视图中图层的layoutBounds与视图layoutBounds相同。
此外,我不需要按照胶子文档中的说明调用layer.show()
("然后通过调用show()显示一个图层,...") ,因为图层在添加到图层后会立即显示。
我错过了什么吗?
答案 0 :(得分:0)
我建议您查看详细文档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
,并且您不必担心这些更低级别的细节。