我有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的类)静态化是一种好习惯吗?我试图避免它,但也许是不必要的?
答案 0 :(得分:0)
要从另一个类调用方法,您有三个选项:
将方法设为静态并调用GUI.setSwitchingPanel
。如果这适合您,您可以轻松地了解静态方法的优点和缺点。
创建类的新实例并调用方法(在您的情况下不合适):</ p>
GUI gui = new GUI();
gui.setSetSwitchingPanel();
传递对另一个对象的引用并调用该方法。这不会创建类的新实例!
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。
这些都是你所拥有的选择,没有其他可能性。