对于模态对话和未修饰JFrame
,我遇到了一个奇怪的问题。
如果我创建一个未修饰的主JFrame
,那么我会显示一个模态对话框,感谢JOptionPane
,一切顺利。模态对话框始终位于顶部,我无法点击主要名声。
但是,如果创建另一个JFrame
(或另一个JDialog
),模态对话框仍然阻止我与主框架交互,但现在模态对话框并不总是位于顶部并且位于点击它时的主框架。
这个问题不会发生:
修改
我在jdk1.7.0.0_09
上使用Linux Sus
e。但我与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");
}
答案 0 :(得分:4)
但是,如果创建另一个JFrame(或另一个JDialog),则为模态对话框 仍然阻止我与主框架互动,但现在是模态 对话框并不总是在顶部,当我在主框架下面时 点击它。
根本不是真的,两者都不可访问,直到JOptioPane可见
JOptionPane或JDialod.setModal(true)阻止从currnet JVM调用的alll窗口的鼠标或键事件
必须有一些其他问题不清楚,其余的代码,次要的可能是Java版本和Native OS
Java6代码(winxp),适用于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();
}
});
}
}