JMenuItem 在 GLCanvas 后面显示?
JMenuItem desplaying behind GLCanvas?
我在 GLCanvas 后面显示的 JMenuItem 有一些问题。
第一次点击 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();
}
}
JPopupMenu
有一个方法:
setDefaultLightWeightPopupEnabled(false);
和JMenu
有一个方法:
getPopupMenu();
所以我猜您需要遍历所有菜单才能获得弹出菜单并使其成为重量级弹出菜单。
有关详细信息,请参阅 Mixing Heavyweight and Lightweight Components。
我在 GLCanvas 后面显示的 JMenuItem 有一些问题。
第一次点击 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();
}
}
JPopupMenu
有一个方法:
setDefaultLightWeightPopupEnabled(false);
和JMenu
有一个方法:
getPopupMenu();
所以我猜您需要遍历所有菜单才能获得弹出菜单并使其成为重量级弹出菜单。
有关详细信息,请参阅 Mixing Heavyweight and Lightweight Components。