Java Swing - 为所有子组件设置不透明度?
Posted
技术标签:
【中文标题】Java Swing - 为所有子组件设置不透明度?【英文标题】:Java Swing - set opacity for all children components? 【发布时间】:2011-11-29 05:55:40 【问题描述】:我有一些带有孩子的 Swing 组件。当我在父级上setOpaque(false)
时,子级仍然有不透明性。
所以我破解了这个功能(感谢 SOF 用户):
Component[] comps = this.getComponents();
for(Component c : comps) if(c instanceof JComponent)
((JComponent)c).setOpaque(false);
但现在我被自我怀疑所困扰 - 这似乎有点笨拙,有没有更好的方法来做到这一点?
【问题讨论】:
【参考方案1】:您可以在面板中添加一个 ContainerListener,并在添加子项时设置它们的不透明度。
但是,无论是这个解决方案还是您的解决方案都不会处理嵌套面板。
据我所知,没有简单的解决方案。
【讨论】:
给刚刚添加的孩子添加this
ContainerListener
怎么样?【参考方案2】:
你的方法没问题。更好一点的是:
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);
但是如果你的组件树改变了,你每次都需要调用这个方法。
【讨论】:
以上是关于Java Swing - 为所有子组件设置不透明度?的主要内容,如果未能解决你的问题,请参考以下文章
java swing问题:JFrame根面板不透明且可见,内容面板不透明且可见,层面板透明且可见,