0

我对显示在 GLCanvas 后面的 JMenuItem 有一些问题。

第一次单击 JMenuItem 时,它显示在 GLCanvas 前面,但是一旦单击 JSplit 以拉伸它,我就会遇到这个问题。

我发现这个问题一般是在使用带有AWT组件的Swing组件时引起的,

你知道如何解决这个问题。

在此处输入图像描述

这是我的代码。

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();
      }
}
4

1 回答 1

1

JPopupMenu有一个方法:

setDefaultLightWeightPopupEnabled(false);

JMenu有一个方法:

getPopupMenu();

所以我猜你需要遍历你所有的菜单来获得弹出菜单并使它成为一个重量级的弹出菜单。

有关详细信息,请参阅混合重量级和轻量级组件

于 2017-10-12T15:04:18.133 回答