【问题标题】:setUndecorated(true) messing with toFront()setUndecorated(true) 与 toFront() 混淆
【发布时间】:2015-02-21 08:41:13
【问题描述】:

当 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

菜单由鼠标事件调用,但有时显示在前面,有时显示在主框架的后面...

public static void checkMove(int action, MouseEvent e) {
    int x = e.getX();
    if(x == 0){
        menu.setVisible(true);
        menu.toFront();
    }else{
        menu.setVisible(false);
    }

我尝试过frame.toBack();,但它也将帧发送到其他所有内容之后... 如何将未修饰的 JFrame 放在另一个未修饰的 JFrame 前面并使其保持一致?

编辑:菜单框在鼠标事件时消失

contentPane.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseExited(MouseEvent e) {
            setVisible(false);
        }
    }); 

EDIT2:在 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);
        }
    });
}
}

【问题讨论】:

    标签: java swing jframe


    【解决方案1】:

    【讨论】:

    • 我已根据您的回答编辑了问题,但在设置父框架时仍然遇到一些问题
    • 好的,所以我想通了...感谢您为我指明正确的方向
    【解决方案2】:

    默认情况下,JFrame 不会正确响应 AlwaysOnTop 或 toFront,这不是主要顶级容器的主要功能(没有图标化和去图标化,但随后会在屏幕上闪烁)

    你必须使用 JDialog 来完成这项工作,为父级和模态设置(如果需要)


    确切地说,您也可以使用 JinternalFrame 让您在主 Jframe 中有一些子框架,您可以图标化和去图标化或关闭不需要的,如果您需要,还可以调整它们的大小。 如果你想让它们在别人的前面或后面,你可以通过拖放那个 Frame Children 来轻松实现!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-20
      • 2014-07-09
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多