2011-10-02 89 views
3

我有一些兒童Swing組件。當我父母上的我setOpaque(false),孩子仍然有不透明。Java Swing - 爲所有兒童組件設置不透明度?

所以我砍死了這個功能(感謝SOF用戶):

Component[] comps = this.getComponents(); 

for(Component c : comps) { if(c instanceof JComponent) { 
    ((JComponent)c).setOpaque(false); } 
} 

但現在我與自我懷疑所困擾 - 這似乎有點笨重,有沒有更好的辦法做到這一點?

回答

2

您可以將一個ContainerListener添加到面板,並設置子項添加時的不透明度。

但是,這種解決方案或您的解決方案都不會處理嵌套面板。

我知道沒有簡單的解決方案。

+0

將'this'' ContainerListener'添加到剛剛添加的子項中怎麼樣? – Mohayemin

0

你的方式沒問題。更好一點是:

public void setOpaqueForAll(JComponent aComponent, boolean isOpaque) { 
    aComponent.setOpaque(isOpaque); 
    Component[] comps = aComponent.getComponents(); 
    for (Component c : comps) { 
    if (c instanceof JComponent) { 
     setOpaqueForAll((JComponent) c, isOpaque); 
    } 
    } 
} 

但是,如果您的組件樹已更改,則需要每次調用此方法。