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();
Поэтому я думаю, вам нужно перебрать все ваши меню, чтобы получить всплывающее меню и сделать его всплывающим.
См. Смешивание тяжелых и легких компонентов для получения дополнительной информации.