2011-11-23 30 views
2

我想覆蓋JPanel頂部的自定義透明度。我希望這兩個組件都擴展到分層窗格的邊緣。我已經覆蓋了頂層組件的paintComponent方法,除了當我想顯示覆蓋層時通常什麼也不做。然後它在合適的位置繪製適當的文字。這是在一個面板中覆蓋多個組件的正確方法嗎?

這裏是我的佈局問題的解決方案:

JLayeredPane jlp = new JLayeredPane(); 
jlp.setLayout(new OverlayLayout(jlp) { 
    @Override 
    public void layoutContainer(Container target) { 
     for (Component c: target.getComponents()) 
      c.setBounds(0, 0, target.getWidth(), target.getHeight()); 
    } 
}); 

的問題是 - 有沒有更好的方式來做到這一點沒有覆蓋layoutContainer?這對我來說似乎是一個黑客。我的意思是,我真的不敢相信,在佈置組件時沒有辦法做到這一點。但如果我不覆蓋這個方法,它會在頂部和左側留下空隙。

我在這裏錯過了什麼,或者這是處理這些要求的正確方法嗎?

回答

2

OverlayLayout並未設計用於調整所有組件以填充整個可用空間。實際上你已經創建了一個定製的佈局管理器。這種方法沒有錯。

我不知道你爲什麼使用JLayeredPane。您應該可以使用帶OverlayLayout和多個組件的常規JPanel。或者,如果你想使用JLayeredPane,那麼你可能不需要OverlayLayout。您可以將ComponentListener添加到分層窗格,並在生成調整大小的事件時調整所有組件的大小。

相關問題