我正在学习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);
“add”带有下划线,因此我无法编译代码。
我一直在寻找解决这个问题的方法,据我所知,这应该可行。
感谢任何帮助。
谢谢
约什
答案 0 :(得分:2)
请注意, menuBar()方法是 void 类型,因此没有返回任何值,而 add()方法的内容( JPanel)你需要两个参数是(JComponent类型 [注意JMenuBar是JComponent的子类] ,int [用于Layouting目的] )
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
我的建议是在Java中处理GUI而不是依赖于组合的概念时,使用继承的概念(将菜单栏类扩展到JMenuBar,以便您的类可以像JMenuBar一样工作)。关于设置JMenuBar,您也可以关注上面的帖子:
frame.setJMenuBar(menu.menuBar());
如果您是Java编程的新手,则需要开始练习Java编码标准,尤其是正确命名类和方法。 Class的名字的第一个字母应该大写,而你的方法名称至少应该有一个动词。 :)
答案 1 :(得分:1)
方法menuBar
具有void
返回类型,因此不适用于add
方法。所以你需要
content.add(menubar.menuBar(), BorderLayout.NORTH);
从menu
方法返回menuBar
时
除此之外:setJMenuBar
用于为JMenuBar
设置JFrame
。
frame.setJMenuBar(menu.menuBar());
答案 2 :(得分:1)
而不是:
content.add(menu.menuBar(), BorderLayout.NORTH);
我认为你的意思是:
content.add(menubar.menuBar(), BorderLayout.NORTH);
...但是仍然无效,因为此方法的返回类型为void
。它必须是JMenuBar
。
答案 3 :(得分:0)
我想你:
new menubar()
是menubar.menubar()
函数static
public static JMenuBar menubar() { ... }
,而不是menubar.menubar()
到return menu
,否则,这种方法只是一个昂贵的无操作 content.add(menu.menuBar(), ...)
带有下划线,因为您无法使用void
方法作为其他方法的参数。
此外,您应始终使用类而不是实例引用静态字段或方法。类名应以大写字母(Menu
)开头。