模态对话框并不总是未修饰的JFrame的顶部时,另一个JFrame中可见(Modal dialog

2019-10-17 16:26发布

我有模态对话框未修饰一个奇怪的问题JFrame

如果我创建一个主未修饰JFrame然后我显示一个模式对话框感谢JOptionPane ,一切顺利。 模态对话框总是停留在顶端,我不能点击主名气。

但是,如果创建另一个JFrame (或其他JDialog ),模态对话框仍然阻止我与主框架进行交互,但现在的模态对话框并不总是在上面,走的时候我点击它的主框架下面。

此问题不发生:

  • 如果主帧装饰
  • 或者,如果第二帧是不可见

编辑

我用jdk1.7.0.0_09Linux Sus e.But我有相同的结果jre 1.6.0_32

该代码我用来测试:

 public static void main(String[] args) {
    // creates main frame and set visible to true
    final JFrame mainFrame = new JFrame();
    mainFrame.setUndecorated(true); // if I comment this line, everything goes well
    mainFrame.add((new JPanel()).add(new JButton("OK")));
    mainFrame.setSize(new Dimension(500, 500));
    mainFrame.setVisible(true);
    // creates a dialog and set visible to true
    JFrame anotherFrame = new JFrame();
    anotherFrame.setVisible(true); // or if I comment this line, everything goes well too
    // display a modal dialog
    JOptionPane.showMessageDialog(mainFrame, "A message");
}

Answer 1:

但是,如果创建另一个的JFrame(或其他的JDialog),模态对话框仍然阻止我与主框架进行交互,但现在的模态对话框并不总是在上面,走的时候我点击它的主框架下面。

  • 根本不符合事实,都是没有入店,直到JOptioPane可见

  • 的JOptionPane或JDialod.setModal(真)块鼠标或键事件到alll窗口从currnet JVM调用

  • 必须有别的东西,是不是清楚你的问题,代码的其余部分,未成年人可能是Java版本和Native OS

为的Java6(操作系统)的代码,对我的作品上的Win7 / java7目录(x.x_011)

import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Main {

   private JFrame mainFrame = new JFrame();
   private JFrame anotherFrame = new JFrame();

    public Main() {
        mainFrame.setUndecorated(true);
        mainFrame.add((new JPanel()).add(new JButton("OK")));
        mainFrame.setSize(new Dimension(100, 60));
        mainFrame.setVisible(true);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        anotherFrame.setVisible(true);
        anotherFrame.setLocation(110, 0);
        anotherFrame.setSize(new Dimension(100, 60));
        anotherFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JOptionPane.showMessageDialog(mainFrame, "A message");
    }


    public static void main(String[] args) {
       java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                Main main = new Main();
            }
        });
    }
}  


文章来源: Modal dialog not always on top of an undecorated JFrame when another JFrame is visible