JMenu не появится в моем jFrame

Я не вижу свое JMenu в кадре, когда запускаю его, что мне делать?

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

package app.ui;

import java.awt.Color;
import java.awt.Font;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
 import javax.swing.JSeparator;
 import javax.swing.WindowConstants;

 import app.model.User;
 import app.util.JMenusss;



 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionAdapter;

 public class JMenus {
private JFrame menuu;
private SecurityQuestion securityQuestion;
private User user;

private JMenu mnAccount;

public JMenus(JFrame menuu) {
    this.menuu = menuu;
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {



    final JLabel lblHome = new JLabel("");
    lblHome.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent arg0) {
            Welcome myWelcome = new Welcome();
            menuu.dispose();
        }
    });
    lblHome.setIcon(new ImageIcon(JMenus.class.getResource("/app/resources/home-icon.png")));
    lblHome.setBounds(780, 4, 88, 83);
    menuu.getContentPane().add(lblHome);

    final JLabel lblItem = new JLabel("");
    lblItem.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent arg0) {
            ItemManagement myItemManagement = new ItemManagement();
            myItemManagement.ItemManagement();
            menuu.dispose();
        }
    });
    lblItem.setIcon(new ImageIcon(JMenus.class.getResource("/app/resources/items.png")));
    lblItem.setBounds(860, 4, 88, 83);
    menuu.getContentPane().add(lblItem);

    final JLabel lblGroupManagement = new JLabel("");
    lblGroupManagement.setIcon(new ImageIcon(JMenus.class.getResource("/app/resources/group11.png")));
    lblGroupManagement.setBounds(940, 4, 88, 83);
    menuu.getContentPane().add(lblGroupManagement);

    lblGroupManagement.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent e) {
            GroupManagement myGroupManagement = new GroupManagement();
            myGroupManagement.groupManagement();

            menuu.dispose();
        }
    });


    final JLabel lblInventory = new JLabel("");
    lblInventory.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent e) {
            IOStock myInventory = new IOStock();
            myInventory.InventoryWindow();
            menuu.dispose();
        }
    });
    lblInventory.setIcon(new ImageIcon(JMenus.class.getResource("/app/resources/IO.png")));
    lblInventory.setBounds(1020, 4, 88, 83);
    menuu.getContentPane().add(lblInventory);

    final JLabel lblLogout = new JLabel("");
    lblLogout.setIcon(new ImageIcon(JMenus.class.getResource("/app/resources/lock.png")));
    lblLogout.setBounds(1100, 4, 120, 83);
    menuu.getContentPane().add(lblLogout);
    lblLogout.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent e) {

            int selectedOption = JOptionPane.showConfirmDialog(null,"You are about to logout, are you sure?","Choose",JOptionPane.YES_NO_OPTION); 
            if (selectedOption == JOptionPane.YES_OPTION) {
                Login window = new Login();
                window.frmLogin.setVisible(true);
                menuu.dispose();
            }
        }

    });

Здесь мой JMenu

    JMenuBar mnbMenu = new JMenuBar();
    mnbMenu.setBackground(Color.WHITE);
    mnbMenu.setBounds(100, 4, 80, 89);
    menuu.getContentPane().add(mnbMenu);

    mnAccount = new JMenu();
    mnAccount.setBackground(Color.WHITE);
    mnAccount.setForeground(Color.WHITE);
    mnAccount.setIcon(new ImageIcon("/app/resources/Settings-icon.png"));
    mnAccount.setBounds(1180, 4, 100, 100);
    mnbMenu.add(mnAccount);



    JMenuItem mntmChangeUsername = new JMenuItem("Change Username");
    mntmChangeUsername.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent arg0) {
            UpdateUserName updateUsername = new UpdateUserName(user);
            updateUsername.setVisible(true);


        }
    });

    //mntmChangeUsername.setBackground(Color.WHITE);
    mnAccount.add(mntmChangeUsername);

    JMenuItem mntmChangePassword = new JMenuItem("Change Password");
    mntmChangePassword.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent arg0) {
            ChangeUsername changeUsername = new ChangeUsername(menuu);
            changeUsername.changeAcc();

        }
    });
    mntmChangePassword.setBackground(Color.WHITE);
    mnAccount.add(mntmChangePassword);

    JMenuItem mntmChangeSecurityQuestion = new JMenuItem("Change Security Question");
    mntmChangeSecurityQuestion.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseReleased(MouseEvent arg0) {
            ChangeSecurityQuestion changeSecurity = new ChangeSecurityQuestion(user, securityQuestion);
            changeSecurity.setVisible(true);
            changeSecurity.setLocationRelativeTo(null);
            changeSecurity.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            changeSecurity.setAlwaysOnTop(true);

        }
    });
    mntmChangeSecurityQuestion.setBackground(Color.WHITE);
    mnAccount.add(mntmChangeSecurityQuestion);






}

}

Это мой код... Я хочу добавить JMenu в свой фрейм, но его не видно, почему?


person harraypotter    schedule 15.03.2014    source источник
comment
Чтобы быстрее получить помощь, опубликуйте MCTaRE (минимальный полный проверенный и удобочитаемый пример). Примечание. Нигде в этих фрагментах кода нет вызова метода setJMenuBar..   -  person Andrew Thompson    schedule 15.03.2014
comment
Совет: mntmChangeUsername.addMouseListener(.. Не добавляйте в меню прослушиватель мыши. Он не будет реагировать на ввод с клавиатуры. Вместо этого добавьте ActionListener или Action. ActionListener/Action обнаружит как мышь, так и клавиатуру.   -  person Andrew Thompson    schedule 15.03.2014
comment
Совет 2: lblInventory.setBounds(1020, 4, 88, 83); Графические интерфейсы Java могут работать на нескольких платформах, с разными разрешениями экрана и с использованием разных PLAF. Как таковые они не способствуют точному размещению компонентов. Чтобы организовать компоненты для надежного графического интерфейса, вместо этого используйте менеджеры компоновки или их их комбинации, а также отступы и границы макета для пробел.   -  person Andrew Thompson    schedule 15.03.2014


Ответы (1)


Здесь:

JMenuBar mnbMenu = new JMenuBar();
...
menuu.getContentPane().add(mnbMenu);

Правильный способ установить строку меню в JFrame через setJMenuBar():

JMenuBar mnbMenu = new JMenuBar();
...
menuu.setJMenuBar(mnbMenu);

Ознакомьтесь с руководством по Как использовать меню. Кроме того, вы можете просмотреть эту тему Почему JMenuBar не находится на панели содержимого JFrame(...)

Примечание

Взгляните на все советы @AndrewThompson:

  • MCTaRE (минимальный полный проверенный и читаемый пример)
  • Нигде в этих фрагментах кода нет вызова метода setJMenuBar
  • Не добавляйте прослушиватель мыши в меню. Вместо этого добавьте ActionListener или Action.
  • Чтобы организовать компоненты для надежного графического интерфейса, вместо этого используйте менеджеры компоновки или комбинации из них, а также отступы и границы макета для белого пространства.
person dic19    schedule 15.03.2014
comment
Взгляните на оба совета @AndrewThompson. Их было 3. Первый был скрыт в конце первого комментария. ;) - person Andrew Thompson; 15.03.2014
comment
Извините, я полностью упустил это из виду! Только что исправлено :) @AndrewThompson - person dic19; 15.03.2014
comment
Извините, я совершенно не заметил этого! Нет! Я имел в виду более конкретно: Примечание. Нигде в этих фрагментах кода нет вызова метода setJMenuBar, но тогда ваш ответ охватывает это более подробно и лучше. ;) - person Andrew Thompson; 16.03.2014
comment
Аааа эта часть! Честно говоря, я не дочитал до конца ваш первый комментарий :P Какой позор! Когда я начал читать, я предположил (ошибочно), что ваш комментарий был полностью о MCTaRE. Еще раз извините за это. @ЭндрюТомпсон - person dic19; 16.03.2014
comment
Ну и дела .. теперь вы заставили меня хотеть проголосовать за ответ .. снова. :) - person Andrew Thompson; 16.03.2014
comment
Хехе спасибо! Кстати, я никогда не говорил вам этого раньше, но те вопросы и ответы, которые вы всегда цитируете, просто великолепны! Серьезно, тот, что про пустые места, заслуживает гораздо большего количества голосов. Я не могу снова проголосовать за них, но я хотел бы. @ЭндрюТомпсон - person dic19; 16.03.2014
comment
.. те вопросы и ответы, которые вы всегда цитируете, великолепны! Когда я задаю вопрос с намерением ответить на него, это означает, что я могу написать отличный (ИМХО) ответ. Это одна из тех вещей, о которых большинство людей обычно забывают, отвечая на вопрос «как разместить компоненты именно там, где я хочу?». типа вопрос. Достаточное количество входящих ссылок, и он «дойдет» до тех пор, пока не наберутся голоса. Это просто вопрос времени и терпения. ;) - person Andrew Thompson; 16.03.2014