我有一些带孩子的Swing组件。当我在父母身上setOpaque(false)
时,孩子仍然具有不透明度。
所以我破解了这个功能(感谢SOF用户):
Component[] comps = this.getComponents();
for(Component c : comps) { if(c instanceof JComponent) {
((JComponent)c).setOpaque(false); }
}
但现在我受到了自我怀疑的困扰 - 这看起来有点笨拙,有没有更好的方法呢?
答案 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);
}
}
}
但是如果你的组件树发生了变化,你每次都需要调用这个方法。