Компонент должен быть добавлен в кадр до того, как он станет видимым.
JFrame ramka = new JFrame();
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ramka.setTitle("Super Boxxy");
ramka.setResizable(false);
ramka.pack();
Вы создаете рамку и упаковываете ее без добавления каких-либо компонентов в рамку. Вы вызываете метод pack () ПОСЛЕ добавления компонентов к фрейму, чтобы все компоненты могли отображаться в их предпочтительном размере.
public class Menu extends JLabel implements MouseListener {
Почему вы расширяете JLabel? Вы не добавляете какие-либо новые функции для метки.
Я бы посоветовал вашему классу:
- Расширьте JPanel, чтобы вы могли добавить все свои компоненты на панель
- весь код в методе
ZbudujMenu(...)
будет перемещен в конструктор класса Menu ().
- избавиться от всей логики JFrame из класса Menu.
Тогда код в методе main () будет выглядеть примерно так:
JFrame ramka = new JFrame();
ramka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ramka.setTitle("Super Boxxy");
ramka.add( new Menu() ):
ramka.setResizable(false);
ramka.pack();
ramka.setLocationRelativeTo(null);
ramka.setVisible( true );
//Menu window = new Menu(ramka);
//window.ZbudujMenu(ramka);
Прочитайте учебник Swing . Существует множество демонстрационных программ, которые покажут вам, как создать графический интерфейс, используя эту базовую структуру. Демонстрации также покажут вам, как создать свой графический интерфейс на Event Dispatch Thread (EDT)
. Все компоненты Swing должны быть созданы на EDT
.