2016-04-03 44 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