从另一个类访问在主类中创建的对象方法

时间:2011-03-31 19:32:28

标签: java

是否可以访问在主类中创建的对象?或者有办法获得所有者/参考类?

例如,在下面的代码中,如何从菜单 myMainClass 上的方法 setMenu >类对象( firstMenu secondMenu

我可以将Menu对象设为静态,但似乎不是正确的方法......

主要类

public class myMainClass extends JFrame {

    JPanel container;
    Menu firstMenu;
    Menu secondMenu;

    myMainClass() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 400);

        firstMenu = new Menu();
        secondMenu = new Menu();

        container = new JPanel(new CardLayout());
        container.add(firstMenu, "firstMenu");
        container.add(secondMenu, "secondMenu");

        add(container);
    }

    public void setMenu(String s) {
        CardLayout cl = (CardLayout) (container.getLayout());
        cl.show(container, s);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                myMainClass myMainClassObject = new myMainClass();
                myMainClassObject.setVisible(true);
            }
        });
    }
}

菜单类

public class Menu extends JFrame {

    Menu() {
        //How can I call myMainClass setMenu method from here?
        //myMainClass.setMenu("secondMenu");
        //myMainClassObject.setMenu("secondMenu");
    }
}

由于

2 个答案:

答案 0 :(得分:0)

你已经回答了自己的问题。将setMenu方法设为静态。

public void setMenu(String s) {
        CardLayout cl = (CardLayout) (container.getLayout());
        cl.show(container, s);
    }

使用MyMainClass.setMenu类中的类名Menu调用它。

否则,您必须通过重载其构造函数将MyMainClass的实例传递给Menu类。

firstMenu = new Menu(this);
secondMenu = new Menu(this);

在另一堂课中,

public class Menu extends JFrame {

    Menu() {
        //How can I call myMainClass setMenu method from here?
        //myMainClass.setMenu("secondMenu");
        //myMainClassObject.setMenu("secondMenu");
    }

    Menu(MyMainClass main) {
        main.setMenu("secondMenu");
    }
}

答案 1 :(得分:0)

setMenu()是一个实例方法,如果你想调用它,你需要实例化myMainClass,btw应该被称为MyMainClass,所以你需要这样做:

MyMainClass mainClass = new MyMainClass();
mainClass.setMenu("secondMenu");

如果您希望通过类访问该方法,那么您需要创建静态方法,因此它是一个类方法而不是实例方法,因此您可以将其称为:

MyMainClass.setMenu("secondMenu");