【问题标题】:Java Swing - set opacity for all children components?Java Swing - 为所有子组件设置不透明度?
【发布时间】: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); }
}

但现在我被自我怀疑所困扰 - 这似乎有点笨拙,有没有更好的方法来做到这一点?

【问题讨论】:

    标签: java swing components opacity children


    【解决方案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);
        }
      }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 2018-06-14
      • 1970-01-01
      • 2013-06-05
      • 2016-07-06
      • 1970-01-01
      相关资源
      最近更新 更多