Что не так с добавлением меню?
Вот код:
Класс main:
package com.company;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.Menu;
public class Main extends JFrame {
public Main() {
setTitle("Меню");
setSize(640, 480);
setResizable(false);
Menu menu = new Menu();
add(menu);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Main();
}
}
menu красное. Error: Cannot resolve method 'add(java.awt.Menu)'
Попытался изменить на это:
add((PopupMenu) menu);
Но возникли новые ошибки:
Exception in thread "main" java.lang.ClassCastException: class java.awt.Menu cannot be cast to class java.awt.PopupMenu (java.awt.Menu and java.awt.PopupMenu are in module java.desktop of loader 'bootstrap') at com.company.Main.(Main.java:15) at com.company.Main.main(Main.java:22)
- Find why menu could be not null: add((PopupMenu) menu);
- at com.company.Main.main(Main.java:22) - new Main();
Класс Menu:
package com.company;
import java.awt.*;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.swing.BoxLayout;
import javax.swing.Box;
import java.awt.event.ActionEvent;
import javax.swing.*;
public class Menu extends JPanel {
public boolean started = false;
public Menu() {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(Box.createVerticalStrut(280));
JButton button = new JButton("START");
button.setAlignmentX(CENTER_ALIGNMENT);
button.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
start();
}
});
add(button);
add(Box.createVerticalGlue());
}
public void start() {
removeAll();
started = true;
repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (!started)
g.drawImage(new ImageIcon(Menu.class.getResource("background.jpg")).getImage(), 0, 0, 640, 480, this);
else
setBackground(Color.BLUE);
}
}
В классе Main я написал:
JMenu menu = new JMenu();
add(menu);
вместо:
Menu menu = new Menu();
add(menu);
Сейчас все Ok. Нет ошибок.
Но окно пустое. В нем нет картинки .. Почему?
Ответы (1 шт):
Вы импортировали класс java.awt.Menu, а он НЕ является компонентом, который можно добавить к контейнеру или компоненту,см. документацию по методам:
Скорей всего, у вас просто перепутан import, так как ваше меню реализовано в пакете com.company.
Также импорт всего пакета java.awt.* в классе Menu может вызвать конфликт имён java.awt.Menu и com.company.Menu, как объясняется в ответе на вопрос: Зачем усложнять импорт в джава?
Лучше переименовать собственную реализацию, чтобы у неё было какое-то более уникальное имя, хотя бы MyMenu.