调用在其他类main方法中启动的对象中定义的方法

时间:2015-08-12 12:43:27

标签: java

我有2节课。是否可以使用gui的setSwitchingPanel方法设置gui对象的switchingPanel变量?我知道我不能轻易地从其他类调用这个方法。有没有办法在AddPatientPanel.class中调用此metod而不将JPanels变量和此方法设为静态?我是初学者,但我读过以避免任何静态。

GUI.class

public class GUI
{
    private JPanel switchingPanel;
    private JPanelA panel1 = new JPanelA();
    private JPanelB panel2 = new JPanelB();
    private AddPatientPanel addPatientPanel = new AddPatientPanel();

    public GUI() 
    {
        //Constructor
    }

    public void setSwitchingPanel(JPanel panel)
    {
        switchingPanel = panel;
    }

    public static void main(String[] args) 
    {
        EventQueue.invokeLater(new Runnable()
        {
            @Override
            public void run() 
            {
                // Invoking GUI constructor
                GUI gui = new GUI();

            }
        });
    }
}

AddPatientPanel.class

public class AddPatientPanel extends JPanel
{
   public AddPatientPanel()
   {
       //Constructor
   }

   public void myMethod()
   {
        gui.setSwitchingPanel(JPanel panel2) //not working for sure, but i want do something similar to it
   }
}

解释我的需要: 在GUI.class中,我正在创建其他类的实例(扩展了JPanel,例如AddPatientsPanel,AddEmployeePanel,ShowSchedulePanel)。我不想创建同一个面板类的另一个实例,以避免在用户更改视图时清除其中的字段(我正在从框架中删除旧的JPanel,并在其中添加新的JPanel)。对于JMenu,JToolBar的快捷方式一切正常。

但是其中一个面板类中的按钮(例如在AddPatientPanel中)必须执行相同的操作(更改switchingPanel变量并在框架中重新加载视图)。

在这种情况下,将GUI类(扩展JPanel的类)静态化是一种好习惯吗?我试图避免它,但也许是不必要的?

1 个答案:

答案 0 :(得分:0)

要从另一个类调用方法,您有三个选项:

  1. 将方法设为静态并调用GUI.setSwitchingPanel。如果这适合您,您可以轻松地了解静态方法的优点和缺点。

  2. 创建类的新实例并调用方法(在您的情况下不合适):<​​/ p>

    GUI gui = new GUI();
    gui.setSetSwitchingPanel();
    
  3. 传递对另一个对象的引用并调用该方法。这不会创建类的新实例!

    public class AddPatientPanel extends JPanel
    {
        private GUI gui;
    
        public AddPatientPanel(GUI gui)
        {
            this.gui = gui;
        }
    
        public void myMethod()
        {
            gui.setSwitchingPanel(JPanel panel2) 
        }
    }
    

    使用new AddPatientPanel(this)在GUI中创建AddPatientPanel。

  4. 这些都是你所拥有的选择,没有其他可能性。