2016-04-03 47 views
1

我安装在GlassPane那样的层:布局玻璃面板层的工作不正常

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

现在我希望myLayer的内容的glassPane中心被神韵:喜欢它的时候我加了一层View

view.getLayers().add(myLayer) 

虽然对齐方式设置为中心,我得到以下结果:

enter image description here

我注意到添加到glassPane的图层的layoutBounds全部为“0”,而视图中的图层的layoutBounds与视图的layoutBounds完全相同。

此外,我不需要调用layer.show()胶水文档中所述(“通过调用show(),...”显示一个图层即可实现),因为该图层在添加后立即显示到一层。

我错过了什么吗?

回答

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,您不需要担心这些更低层次的细节。

+0

正是我在找的东西。非常感激! (我需要一个自定义ProgressIndicator的'Layer',并且在Charm lib中找不到合适的) – jns