Java Swing - 如何为所有子组件设置不透明度?

3

我有一些带有子组件的Swing组件。当我在父组件上使用setOpaque(false)时,子组件仍然具有不透明度。

因此,我编写了这个函数(感谢SOF用户):

Component[] comps = this.getComponents();

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

但现在我被自我怀疑所困扰 - 这似乎有点笨拙,是否有更好的方法来解决它?

2个回答

2
您可以向面板添加ContainerListener,并在添加子元素时设置它们的不透明度。但是,无论是您的解决方案还是其他方案都无法处理嵌套面板。我目前还没有发现简单的解决方案。

刚刚添加的子项中加入此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);
    }
  }
}

但是如果您的组件树发生了变化,您需要每次调用此方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接