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,并在添加子项时设置它们的不透明度。

但是,无论是这个解决方案还是您的解决方案都不会处理嵌套面板。

据我所知,没有简单的解决方案。

【讨论】:

给刚刚添加的孩子添加thisContainerListener怎么样?【参考方案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根面板不透明且可见,内容面板不透明且可见,层面板透明且可见,

Java Swing:轻量级和重量级组件的叠加组件?

Java Swing - 从鼠标侦听器更改 JComponent 不透明度

如何在swing里面设置背景图片???

在 Java Swing 中禁用时如何调整字段的不透明度

java swing控件JTable 怎么单独设置某一行的颜色