JMenuItem разворачивается за GLCanvas?

У меня есть некоторые проблемы с JMenuItem, который отображается за GLCanvas.

В первый раз при нажатии на JMenuItem он отображается перед GLCanvas, но когда я щелкаю в JSplit, чтобы растянуть его, я получаю эту проблему.

Я обнаружил, что эта проблема обычно возникает при использовании компонентов Swing с компонентами AWT,

Есть ли у вас идеи, как решить эту проблему.

Это мой код

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import com.jogamp.opengl.awt.GLCanvas;

public class MenuTest extends JFrame {
      public MenuTest()      {
            this.addWindowListener      (new WindowAdapter(){
                  public void windowClosing(WindowEvent e){
                        dispose();
                        System.exit(0);
                  }
            });
      }

      public static void main(String args[]) {
        int numberOfMenuItems = 5;
            MenuTest f = new MenuTest();
            Container cont = f.getContentPane();
            cont.setLayout(new GridLayout(2,1));
            JMenuBar menuBar = new JMenuBar();
            JMenu menu = new JMenu("testMenu");
            for(int i=0; i<numberOfMenuItems; i++){
                JMenu item = new JMenu("Item "+i);
                item.add(new JMenuItem("item"));
                menu.add(item);

            }
            menuBar.add(menu);
            f.setJMenuBar(menuBar);


            GLCanvas canvas = new GLCanvas();
            canvas.setBackground(new Color(100, 50, 100));
            JSplitPane split = new JSplitPane();

            Container wrappingContainer = new Container();
            wrappingContainer.setLayout(new BorderLayout());
            wrappingContainer.setBackground(new Color(100,100,100));
            wrappingContainer.add(canvas);

            split.add(wrappingContainer, JSplitPane.RIGHT);
            split.add(new JPanel(), JSplitPane.LEFT);

            f
            .getContentPane().add(split);

            f.setSize(400,200);
            f.show();
      }
}

1 ответ

Решение

JPopupMenu имеет метод:

setDefaultLightWeightPopupEnabled(false);

а также JMenu имеет метод:

getPopupMenu();

Поэтому я думаю, вам нужно перебрать все ваши меню, чтобы получить всплывающее меню и сделать его всплывающим.

См. Смешивание тяжелых и легких компонентов для получения дополнительной информации.

Другие вопросы по тегам