我学习Java和我想的菜单栏添加到从另一个类我的框架(练划分代码划分为多个类别,以便更好地组织程序)。
这里是我的代码示例:
public class MainApp {
public static void main(String[] args) {
// Create window
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(600, 400);
// Create main panel
JPanel content = new JPanel();
content.setLayout(new BorderLayout());
frame.add(content);
//Create menu bar
menubar menu = new menubar();
content.add(menu.menuBar(), BorderLayout.NORTH);
//Other stuff...
} // Ends main method
} // Ends MainApp class
和菜单栏类:
public class menubar {
public static void menuBar(){
JMenuBar menu = new JMenuBar();
JMenu file = new JMenu("File");
JMenuItem clear = new JMenuItem("New");
JMenuItem exit = new JMenuItem("Exit");
JMenu help = new JMenu("Help");
JMenuItem about = new JMenuItem("About");
JMenuItem instructions = new JMenuItem("Instructions");
} // Ends method menuBar
} // Ends class menubar
我使用Eclipse,并在该行:
content.add(menu.menuBar(), BorderLayout.NORTH);
“添加”有下划线,因此我不能编译代码。
我一直在寻找一种方式来解决这个问题,而据我所知这应该工作。
任何帮助表示赞赏。
谢谢
玩笑
请注意,您的菜单栏()方法是一个void类型返回,因此没有价值,而内容(JPanel中),您使用的add()方法需要两个参数,这些参数(JComponent的类型[注意的JMenuBar的是Jcomponent的子类],INT [供布点用途])
content.add(menu.menuBar(), BorderLayout.NORTH);
那么你的代码速战速决低于:
public class menubar {
public static JMenuBar menuBar(){
JMenuBar menu = new JMenuBar();
JMenu file = new JMenu("File");
JMenuItem clear = new JMenuItem("New");
JMenuItem exit = new JMenuItem("Exit");
JMenu help = new JMenu("Help");
JMenuItem about = new JMenuItem("About");
JMenuItem instructions = new JMenuItem("Instructions");
return menu;
} // Ends method menuBar
} // Ends class menubar
我对你的建议是与GUI在Java中处理,而不是取决于组成这个概念时使用继承的概念(扩展菜单栏类JMenuBar的,这样你的类可以像的JMenuBar)。 您也可以按照上面的帖子至于设置的JMenuBar:
frame.setJMenuBar(menu.menuBar());
如果您是Java编程的新手,你需要开始练习Java编码标准,尤其是类和方法的正确命名。 类的名称的第一个字母应该大写,而你的方法的名称应该至少有上有一个动词。 :)
代替:
content.add(menu.menuBar(), BorderLayout.NORTH);
我想你的意思是这样的:
content.add(menubar.menuBar(), BorderLayout.NORTH);
......但仍然不会起作用,因为这种方法的返回类型为void
。 它需要JMenuBar
。
该方法menuBar
有一个void
的返回类型,因此并不适用于add
方法。 所以你需要
content.add(menubar.menuBar(), BorderLayout.NORTH);
而返回menu
从menuBar
的方法
旁白: setJMenuBar
用于设置一个JMenuBar
一个JFrame
。
frame.setJMenuBar(menu.menuBar());
我觉得你:
- 不希望创建
new menubar()
如果menubar.menubar()
是一个static
函数 - 希望
public static JMenuBar menubar() { ... }
而不是无效 - 要
menubar.menubar()
以return menu
,否则,该方法只是一个昂贵的无操作
content.add(menu.menuBar(), ...)
加下划线,因为你不能用一个void
方法作为参数的另一种方法。
此外,你应该总是指静态字段或方法使用类,而不是一个实例。 和类名应以大写字母(开始Menu
)。