当setUndecorated设置为false时,我有这两个JFrame可以正常工作,但是当它设置为true时它不能正常工作;
frame = new JFrame("Name of the frame"); // main frame
frame.setAlwaysOnTop(false);
frame.setSize(width, height);
frame.add(canvas);
frame.setUndecorated(true);
frame.setVisible(true);
menu = new MenuUI(); // this is also a undecorated JFrame
Run Code Online (Sandbox Code Playgroud)
菜单由鼠标事件调用,但它有时显示在前面,有时它显示在主框架的后面...
public static void checkMove(int action, MouseEvent e) {
int x = e.getX();
if(x == 0){
menu.setVisible(true);
menu.toFront();
}else{
menu.setVisible(false);
}
Run Code Online (Sandbox Code Playgroud)
我试过这样做,frame.toBack();但它也将框架发送到其他所有内容......我怎样才能将未修饰的JFrame带到另一个未修饰的JFrame前面并使其保持一致?
编辑:鼠标事件时菜单框消失
contentPane.addMouseListener(new MouseAdapter() {
@Override
public void mouseExited(MouseEvent e) {
setVisible(false);
}
});
Run Code Online (Sandbox Code Playgroud)
编辑2:在mKorbel的回答之后,我试图创建一个JDialog,但是我得到了与JFrame相同的结果.如果扩展JDialog,如何设置父级?
package menu;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JDialog;
import openGL.main.openGLMain;
@SuppressWarnings("serial")
public class menuTest extends JDialog {
public menuTest() {
setUndecorated(true);
setBounds(0, 0, 250, frame.getHeight());
GroupLayout groupLayout = new GroupLayout(getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGap(0, 450, Short.MAX_VALUE)
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGap(0, 700, Short.MAX_VALUE)
);
getContentPane().setLayout(groupLayout);
getContentPane().addMouseListener(new MouseAdapter() {
@Override
public void mouseExited(MouseEvent e) {
setVisible(false);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)