2013-05-28 26 views
0

我刚刚开始学习Java,我一直在通过this文档阅读。我不喜欢复制一堆代码并粘贴它。所以我一直试图通过文档工作。JMenuBar找不到符号

我已经有一个工作的JFrame,并决定我会开始添加一个菜单。

这里是我的代码:

package mainframe; 

import javax.swing.*; 

public class menuBar extends JMenuBar { 
    JMenuBar mainMenu = JMenuBar("Menu"); 
} 

我的错误:

error: cannot find symbol 
    JMenuBar mainMenu = JMenuBar("Menu"); 
    symbol: method JMenuBar(String) 
    location: class menuBar 
1 error 

所以反正。我不太确定“无法找到符号错误”的含义。也许我在寻找错误。但每次我Google时,它都会让我面对更复杂的问题,但没有明确的答案。任何关于我在做什么错误的建议或者无法找到符号错误的建议都将非常感谢。提前致谢。

回答

1

在回答你这里特定的代码,我建议你不要扩展JMenuBar类。您可能在很多教程或示例中看到了JFrame课程的扩展,尽管这被认为是bad practice。要添加JMenuBar到你的窗口,我建议做以下几点:

public class MyProgram { 
    JFrame frame; 
    public MyProgram() { 
     ... 
     frame = new JFrame(); 
     JMenuBar mainMenu = new JMenuBar(); 
     JMenu fileMenu = new JMenu("File"); 
     fileMenu.add(new JMenuItem("Open...")); 
     mainMenu.add(fileMenu); // adds a single JMenu to the menubar 
     frame.setJMenuBar(mainMenu); // adds the entire menubar to the window 
     ... 
     frame.setVisible(); 
     ... 
    } 

唯一的原因,你会延长JMenuBar类是,如果你想使一个类中定义方法上有附加功能你的子类,但这似乎不太可能,特别是考虑到你刚刚学习Swing。

+1

你不应该扩展'JFrame';这是不好的做法。 – Doorknob

+0

啊,我的不好,如果我更加关注,我不会把'扩展JFrame'放在那里。这也使得很难理解'add'的起源以及'addMouseListener(this)'工作时'addActionListener(this)'失败的原因。 – SimonT

+0

好的,谢谢。我非常感谢你一直向我解释这一点。 –

0
JMenuBar mainMenu = JMenuBar("Menu"); 

应该

JMenuBar mainMenu = new JMenuBar("Menu"); 

你忘了new关键字。使用构造函数创建新对象时,必须始终使用new。否则,Java会认为这是一种方法,事实并非如此。

此外,如果你看看documentation here。你会发现JMenuBar的构造函数没有任何参数。因此,请不要传递任何东西:

JMenuBar mainMenu = new JMenuBar(); 
+0

好吧..至少让我有一个不同的错误。 -----错误:类JMenuBar中的构造函数JMenuBar不能应用于给定的类型; –

+0

@KrisHollenbeck这意味着你没有给出正确的论点。你确定* JMenuBar的构造函数接受一个String吗? – Doorknob

+0

“JMenuBar”类只有一个构造函数,并且不包含任何参数。 – SimonT

1

JMenuBar的构造函数从不接受任何参数。还要记住在实例化(创建一个新对象的实例)时使用new关键字。请考虑使用以下代码:

JMenuBar mainMenu = new JMenuBar(); 
JMenu fileMenu = new JMenu("File"); 
mainMenu.add(fileMenu); 
+0

什么是mainMenu.add()引用? mainMenu是否假设代表包? –

+0

@KrisHollenbeck JMenuBar.add(JMenu)将JMenu添加到JMenuBar中。当你在第一行创建JMenuBar时,它最初是空的。您构建一个JMenu(向其添加JMenuItems),然后将该JMenu添加到JMenuBar。 – SimonT

+0

好的,我问的原因是因为我在最后一行得到“package mainMenu不存在”。无论如何。谢谢您的帮助。 –