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

时间:2013-10-13 12:50:09

标签: java swing class jpanel jcomponent

嗨我基本上有两节课, 一个主要的,一个只是为了分隔面板,只是为了代码可读性。

我有:

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进入和退出。我的问题是:

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

如何访问按钮并使用它(set,actionlisteners等)?即使他们来自另一个班级,我仍然希望在主要内部使用它?非常感谢!

2 个答案:

答案 0 :(得分:3)

使按钮成为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;
    }
}

答案 1 :(得分:1)

您在main方法中引用了centerPanel。调用centerPanel.renderPanel();后 这些按钮将添加到CenterPanel实例中JPanel类型的“中心”引用中。您可以通过在main方法中调用centerPanel.getGUI();来获取“中心”的引用。这将返回类型为center的{​​{1}}引用。 JComponent是一个awt容器。所以,你可以调用JComponent。这将返回JPanel中存在的数组中的所有组件。即中心参考。你可以迭代它们,得到它们的类型并做你想做的任何事情。