2013-05-28 3 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

А я плохо, если бы я уделял более пристальное внимание, я бы не поставил там 'extends JFrame'. Это также затрудняет понимание истоков 'add' и того, как' addActionListener (this) 'терпит неудачу, пока' addMouseListener (это) 'работает. – 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

Хорошо, потому что я спрашиваю, потому что в последней строке «пакет mainMenu не существует». В любом случае. Спасибо за помощь. –

Смежные вопросы