【发布时间】:2016-01-09 11:19:15
【问题描述】:
我有 3 个对话框一起显示在我的项目中。
- 第一个对话框是无模式的
setVisibleOnTop(false)。 - 第二个对话框与
setVisibleOnTop(true)无模式。 - 第三个对话框是带有
setVisibleOnTop(true)的应用程序模式。
现在的问题是:
- 理想情况下,当使用
APPLICATION_MODAL属性打开“第三个”对话框时,其他JComponent不应接受单击。这适用于 java 1.7。 - 在 java 1.6 中,我单击对话框“一”,然后对话框“第二”位于对话框“一”的后面。而“第三个”对话框仍处于打开状态。
现在的问题是:
- 当打开了
APPLICATION_MODAL对话框(第三个)时,为什么对话框“one”会出现在前面? - 为什么带有属性
setAlwaysOnTop(true)的第二个对话框在后面? - 我认为这是 java 1.6 的问题。有人知道吗?
- 此错误是否记录在某处?
示例代码:
import java.awt.Frame;
import javax.swing.JDialog;
class MyDialog1 extends JDialog {
MyDialog1 ()
{
super();
super.setVisible(false);
setTitle("one");
}
}
class MyDialog2 extends JDialog {
MyDialog2 ()
{
super(null,ModalityType.MODELESS);
setAlwaysOnTop(true);
setTitle("second");
}
}
class MyDialog3 extends JDialog {
MyDialog3 ()
{
super(new Frame(),ModalityType.APPLICATION_MODAL);
setTitle("third");
setAlwaysOnTop(true);
super.setVisible(false);
}
}
public class ModalityIssue {
public static void main(String args[])
{
MyDialog1 d1=new MyDialog1();
d1.setSize(600, 600);
MyDialog2 d2=new MyDialog2();
d2.setSize(500, 500);
MyDialog3 d3=new MyDialog3();
d3.setSize(400, 400);
d1.setVisible(true);
d2.setLocationRelativeTo(d1);
d2.setVisible(true);
d3.setLocationRelativeTo(d2);
d3.setVisible(true);
}
}
【问题讨论】:
-
因为有awt.Frame
标签: java swing modal-dialog jdialog