繁体   English   中英

Java Swing:访问另一个类的面板组件

[英]Java Swing: Access panel components from another class

嗨,我基本上有两个类,一个主类和一个仅用于分隔面板的类,仅用于确保代码的可读性。

我有 :

public class Main{

   public static void main (String args[]) {
    JFrame mainJFrame;
    mainJFrame = new JFrame();

    //some other code here

    CenterPanel centerPanel = new CenterPanel();
    centerPanel.renderPanel();
    mainFrame.add(centerPanel.getGUI());

   }


}

class CenterPanel{
    JPanel center = new JPanel();

    public void renderPanel(){
        JButton enterButton = new JButton("enter");
        JButton exitButton = new JButton("exit");
        center.add(exitButton);
        center.add(enterButton);
    }

    public JComponent getGUI(){
        return center;
    }
}

上面的代码工作完美。 它呈现包含输入和退出按钮的centerPanel。 我的问题是:

我仍然需要操作按钮 ,例如更改颜色,添加一些动作侦听器之类。 但是我无法再主目录中 访问它们,因为从技术上讲它们是来自不同的类,因此在主目录中,centerPanel是另一个对象。

如何访问和使用按钮(设置,动作监听器等)? 即使他们来自另一个班级并且我仍然希望在主要课程中使用它?非常感谢!

使按钮成为CenterPanel成员

class CenterPanel{
    JPanel center = new JPanel();

    JButton enterButton;
    JButton exitButton;

    public void renderPanel(){
        enterButton = new JButton("enter");
        exitButton = new JButton("exit");
        center.add(exitButton);
        center.add(enterButton);
    }

    public JButton getEnterButton()
    {
       return enterButton;
    }

    public JButton getExitButton()
    {
       return exitButton;
    }

    public JComponent getGUI(){
        return center;
    }
}

您在主要方法中引用了centerPanel。 调用centerPanel.renderPanel(); 这些按钮将被添加到CenterPanel实例中JPanel类型的'center'引用中。 您可以通过调用centerPanel.getGUI();获取“ center”的引用centerPanel.getGUI(); 在main方法中。这将返回JComponent类型的center引用。 JComponent是awt容器。因此,您可以调用center.getComponents() 这将返回JPanel中存在的数组中的所有组件。 即中心参考。 您可以迭代它们,获取它们的类型,然后执行所需的任何操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM