【问题标题】:Setting an internal private panel opaque设置内部私有面板不透明
【发布时间】:2021-10-29 19:27:14
【问题描述】:

无论如何我可以设置一个内部私有 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 是一个库类,我无法修改它的代码,有什么方法可以实际设置它的 internalPanel 的不透明设置?

【问题讨论】:

  • 对于您显示的示例(特别是如果您的外部面板内只有一个组件),您可以使用getComponents() 获取包含在您的OuterPanel 中的所有组件。应该只有一个组件,您想要的 internalPanel。然后你可以投射和修改它。

标签: java swing jpanel


【解决方案1】:

正如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 的表单。这解决了它。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    相关资源
    最近更新 更多