昨天我开始用JavaSwing编写一个程序。以前,我只用java编写小型控制台程序。
我把程序的主菜单放在与主方法不同的类中。现在我想为选项菜单添加一个按钮,并将它执行的代码放入自己的类中,这样在主菜单类中我只需要调用选项菜单方法。
在这里我被卡住了。如果我直接在主菜单的类中编写选项菜单的代码,一切都会正常工作。但是,一旦我将选项菜单的方法外包给一个单独的类,我就不能调用外包的方法。
也许你能帮我。
以下是按下选项按钮时应执行的代码:
public class CPP_Frame extends JFrame {
JButton SettingsButton = new JButton("Options");
SettingsButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
CPP_Frame OptionsMenu = new CPP_Frame();
OptionsMenu.OptionsMenuLoader();
}
});
}
这是选项菜单类中的代码,应该由"选项菜单加载器"调用:
public class Options_Menu extends JFrame {
protected void OptionsMenuLoader() {
CPP_Frame OptionsMenu = new CPP_Frame();
OptionsMenu.setSize(new Dimension(400, 500));
OptionsMenu.setVisible(true);
OptionsMenu.setTitle("Options");
OptionsMenu.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
我哪里搞错了,或者我试图编写代码的方式可能吗。我希望我已经足够详细地解释了我的问题。提前感谢。
我可以在这里看到一些潜在的问题,而且我对swing没有太多的了解,所以如果我错了,请纠正我,我只是从编程的角度来看
首先将OptionsMenuLoader()
声明为受保护的方法。这意味着if只能由与其相同类中的方法调用,或者由其派生的类调用
因此,要调用OptionsMenuLoader
,它必须与actionPerformed
覆盖位于同一类中,或者CPP_Frame必须继承Options_Menu,我认为从您的结构来看,这是错误的。
如果这在swing格式中是可能的,那么一个解决方案将是使"OptionsMenuLoader(("成为公共
public void OptionsMenuLoader(){
...
}
其次,我不确定为什么这不会产生错误,您在OptionsMenu
上调用OptionsMenuLoader()
,而这看起来是正确的,您将OptionsMenu
声明为CPP_Frame
而不是Options_Menu
类型。这不应该起作用,因为CPP_Fram
e没有这样的方法OptionsMenuLoader()
。
我认为您的目标是创建一个包含选项菜单的CPP框架。它是在单击不同CPP帧中的按钮时创建的。
在这种情况下,您必须创建一个Options_Menu
动作,而不是CPP帧。然后,您可以在此新菜单上调用OptionsMenu.OptionsMenuLoader()
方法。
public class CPP_Frame extends JFrame {
JButton SettingsButton = new JButton("Options");
SettingsButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Options_Menu OptionsMenu = new Options_Menu();
OptionsMenu.OptionsMenuLoader();
}
});
}
public class Options_Menu extends JFrame {
public void OptionsMenuLoader() {
CPP_Frame OptionsMenu = new CPP_Frame();
OptionsMenu.setSize(new Dimension(400, 500));
OptionsMenu.setVisible(true);
OptionsMenu.setTitle("Options");
OptionsMenu.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}