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

时间:2011-10-02 00:31:44

标签: java swing components opacity children

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

所以我破解了这个功能(感谢SOF用户):

Component[] comps = this.getComponents();

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

但现在我受到了自我怀疑的困扰 - 这看起来有点笨拙,有没有更好的方法呢?

2 个答案:

答案 0 :(得分:2)

您可以向面板添加ContainerListener,并在添加子项时设置子项的不透明度。

但是,此解决方案或您的解决方案都不会处理嵌套面板。

我不知道有什么简单的解决方案。

答案 1 :(得分: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);
    }
  }
}

但是如果你的组件树发生了变化,你每次都需要调用这个方法。