gpt4 book ai didi

java - JMenuItem 在 GLCanvas 后面显示?

转载 作者:行者123 更新时间:2023-12-02 12:08:35 24 4
gpt4 key购买 nike

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

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

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

您知道如何解决这个问题吗?

enter image description here

这是我的代码。

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了解更多信息。

关于java - JMenuItem 在 GLCanvas 后面显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46710923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com