2013-05-28 28 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不存在」。無論如何。謝謝您的幫助。 –