将内部私人面板设置为不透明

Setting an internal private panel opaque

我是否可以将内部私有 JPanel 设置为不透明?一个例子:

//Assuming I have no access rights to modify OuterPanel.java
class OuterPanel extends JPanel{

    private JPanel internalPanel = new JPanel();

    public OuterPanel(){
        setLayout(new BorderLayout());
        internalPanel.setOpaque(true);
        add(internalPanel, BorderLayout.CENTER);
    }
}

class MyClass{
    private OuterPanel myPanel;

    public MyClass(){
        panel = new OuterPanel();
        // is there anyway i can set myPanel's internalPanel to opaque(false)?
        // assuming OuterPanel is a library and i have no way to modify it.
    }
}

使用上面的示例代码,假设 OuterPanel 是一个库 class,我无法修改它的代码,有什么方法可以实际设置它的 internalPanel 的不透明设置吗?

正如 maloomeister 所提到的。我使用以下代码解决了这个问题。

class OuterPanel extends JPanel{

    private JPanel internalPanel = new JPanel();

    public OuterPanel(){
        setLayout(new BorderLayout());
        internalPanel.setOpaque(true);
        add(internalPanel, BorderLayout.CENTER);
    }
}

class MyClass{
    private OuterPanel myPanel;

    public MyClass(){
        panel = new OuterPanel();
        
        setAllOpaque(panel.getComponents());
    }
    
    // This method is called recursively to set ALL JPanels 
    private void setAllOpaque(Component[] comp){
        for (Component com : comp){
            if (com instanceof JPanel){
                JPanel p = (JPanel)com;
                p.setOpaque(false);
                
                setAllOpaque(p.getComponents());
            }
        }
    }
}

我使用递归,因为当前的 OuterPanel 示例很简单,但我实际的实际 JPanel 实际上是一个表单,其中填充了许多不同的 JPanel。这解决了它。

这可能不是最精炼的方法,所以如果有人有更好的解决方案,请分享! :)