Сложность макета моего основного приложения с использованием Swing - PullRequest
2 голосов
/ 07 декабря 2011

Я относительно новичок в Java, и я провел последние два вечера, пытаясь правильно выложить свою Java-программу, и я надеюсь, что кто-то может кое-что прояснить для меня.

Макет все шёл хорошо, пока я не решил добавить строку меню в свое приложение, используя JMenuBar, и теперь по какой-то причине строка меню моего приложения либо исчезает, либо прикрепляется к верхнему центру панели на ширину строки меню Файл. или работает отлично, но скрывает кнопки под ним.

Моя более поздняя попытка немного приблизила меня, но по какой-то причине высота строки меню теперь кажется большой, когда я установил контейнер строки меню на BorderLayout.

Может ли кто-нибудь указать мне в правильном направлении, куда я иду не так?

JPanel mainPane = new JPanel();
BoxLayout progLayout = new BoxLayout(mainPane, BoxLayout.Y_AXIS);

mainPane.setLayout(progLayout);
setContentPane(mainPane);

JMenuBar menuBar = new JMenuBar();

JMenu file = new JMenu("File");
menuBar.add(file);

JMenuItem project = new JMenuItem("New Project");
JMenuItem exit = new JMenuItem("Exit");
file.add(project);
file.add(exit);

JPanel row0 = new JPanel();
BorderLayout menuBarLayout = new BorderLayout();
row0.setLayout(menuBarLayout);
row0.add(menuBar);
add(row0);


JPanel row1 = new JPanel();
row1.setOpaque(false);
row1.add(domainLabel);
row1.add(projectNameInput);
row1.add(userSubmit);
row1.add(userClear);
add(row1);

Большое спасибо.

* Редактировать: мне, наконец, удалось заставить его работать благодаря ответу ниже. См. Комментарии ниже к решению.

1 Ответ

5 голосов
/ 07 декабря 2011

Повторюсь: обычно я добавляю JMenuBar в сам JFrame с помощью его метода setJMenuBar(...).Это добавит его в стиле BorderLayout.NORTH чуть выше contentPane.Если мой JFrame создается в другом месте, я иногда даю классы выше публичного getJMenuBar() метода, чтобы другие классы могли извлечь строку меню, созданную здесь.что JPanel BorderLayout и добавить JMenuBar в позицию BorderLayout.NORTH.Если мне нужны другие компоненты, добавленные через BoxLayout, тогда я добавляю JPanel с использованием BoxLayout к позиции BorderLayout.CENTER основной JPanel и добавляю другие подкомпоненты в JPanel с использованием BoxLayout.1010 * Использование контейнеров верхнего уровня
Использование меню

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...