我在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();
}
}
答案 0 :(得分:1)
JPopupMenu
有一个方法:
setDefaultLightWeightPopupEnabled(false);
和JMenu
有一个方法:
getPopupMenu();
所以我猜你需要遍历所有菜单以获得弹出菜单,并使其成为一个重量级弹出窗口。