Почему синяя полоса перекрывается в меню? - PullRequest
0 голосов
/ 01 декабря 2018

У меня проблема с моим JMenu в Java.Когда я добавляю подменю, которое перекрывает синюю полосу из меню подменю. (Как вы можете видеть на картинке), я не представляю, как это исправить, и я ничего не нашел в интернете.Я надеюсь, что вы можете помочь мне.

Пример изображения:

https://i.stack.imgur.com/Y4SrP.png

PS: я использую Windows 10 Look and Feel

public JFrame frame;
public static JDesktopPane desktopPane = new JDesktopPane();


/**
 * Create the application.
 */
public Systemstammdaten() {
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() {
    frame = new JFrame();
    frame.addComponentListener(new ComponentAdapter() {
        @Override
        public void componentResized(ComponentEvent e) {
            desktopPane.setBounds(0, 22, frame.getWidth(), frame.getHeight());
        }
    });
    frame.getContentPane().setBackground(Color.LIGHT_GRAY);
    frame.setBounds(100, 100, 895, 593);
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    JMenuBar menuBar = new JMenuBar();
    menuBar.setBounds(0, 0, 3860, 21);

    frame.getContentPane().add(menuBar);

    JMenu mnBearbeiten = new JMenu("Bearbeiten");
    menuBar.add(mnBearbeiten);

    JMenuItem mntmNutzer = new JMenuItem("Nutzer");
    mntmNutzer.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        Nutzer iframe = new Nutzer();
                        iframe.setVisible(true);
                        desktopPane.add(iframe);
                        iframe.setSelected(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    });
    mnBearbeiten.add(mntmNutzer);

    JMenuItem mntmRechte = new JMenuItem("Rechte");
    mnBearbeiten.add(mntmRechte);

    JMenu mnNewMenu = new JMenu("New menu");
    mnBearbeiten.add(mnNewMenu);

    JMenuItem mntmNewMenuItem = new JMenuItem("New menu item");
    mnNewMenu.add(mntmNewMenuItem);

    JMenuItem mntmNewMenuItem_1 = new JMenuItem("New menu item");
    mnNewMenu.add(mntmNewMenuItem_1);
    desktopPane.setBackground(Color.LIGHT_GRAY);

    desktopPane.setBounds(0, 22, 879, 532);
    frame.getContentPane().add(desktopPane);
}

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Это помогло мне:

JPopupMenu.setDefaultLightWeightPopupEnabled(false);
0 голосов
/ 01 декабря 2018
frame.getContentPane().add(menuBar);

Вы должны использовать:

frame.setJMenuBar( menuBar );

для добавления меню в специальную зарезервированную область фрейма.

Кроме того, не используйте пустой макет и setBounds(...).Swing был разработан для использования с менеджерами компоновки.

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

Прочитайте Swing Tutorial .Разделы:

  1. How to Use Menu Bars
  2. How to use a JDesktopPane

содержат дополнительную информацию и рабочие примеры для начала работы.

...