开发者

Access an object method created in main class from another class

Is it possible to access an object created in main class? or there is a way of get the owner/reference class?

For example, in the code below, how can I call the method setMenu, that is on the myMainClass, from one of the Menu class objects (firstMenu, secondMenu)

I can make the Menu objects static but doesn't seems like the right approach...

Main Class

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);
            }
        });
    }
}

Menu Class

public class Menu extends JFrame {

    Menu() {
        //How can I call m开发者_运维百科yMainClass setMenu method from here?
        //myMainClass.setMenu("secondMenu");
        //myMainClassObject.setMenu("secondMenu");
    }
}

Thanks


You've answered your own question. Make the setMenu method static.

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

And invoke it using the class name MyMainClass.setMenu in the Menu class.

Otherwise, you'll have to pass the instance of MyMainClass to the Menu class by overloading its constructor.

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

And in the other class,

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");
    }
}


setMenu() is an instance method if you want to call it you would need to instantiate myMainClass, which btw should be called MyMainClass, so you need to do:

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

If you want the method to be accessed via the class then you would need to create the method static, so it is a class method and not an instance method, so you can call it like:

MyMainClass.setMenu("secondMenu");
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜