如何在Java小程序中打开模式对话框?
我试图在一个如何在Java小程序中打开模式对话框?,java,applet,dialog,Java,Applet,Dialog,我试图在一个小程序前面显示一个模式对话框 我当前的解决方案获取根帧的方式如下: Frame getMyParent() { Container parent = getParent(); while (!(parent instanceof Frame)) { parent = ((Component)parent).getParent(); } return (Frame)parent; } 并按如下方式创建对话框: public Option
小程序前面显示一个模式对话框
我当前的解决方案获取根帧的方式如下:
Frame getMyParent() {
Container parent = getParent();
while (!(parent instanceof Frame)) {
parent = ((Component)parent).getParent();
}
return (Frame)parent;
}
并按如下方式创建对话框:
public OptionsDialog(MainApplet applet, boolean modal) {
super(applet.getMyParent(), "options", modal);
// ....
然而,这通常会在框架下方显示模态对话框,尽管模态行为工作正常
如何解决这个问题
理想情况下,这应该适用于Java 1.5及以上版本。使用null替代applet.getMyParent()
框架f=(框架)SwingUtilities.getAncestorOfClass(框架.类,父窗口);
新JDialog(f,true)
(来源=)
适用于parentWindow=sun.plugin2.main.client.PluginEmbeddedFrame谢谢camickr。不幸的是,这需要1.6版,我一直坚持支持Java1.5(因为很多人仍然使用它)。抱歉没有澄清,我已经编辑了这个问题。我不知道我发布的任何代码都是版本1.6独有的。我发现JDialog(Window)构造函数是1.6特定的:好的,所以获取窗口的构造函数来自1.6,但还有许多其他构造函数可供使用。我打赌你实际上是在使用JFrame作为所有者窗口,所以只要将窗口转换为JFrame即可。有一个构造函数,它接受一个框架,JFrame扩展框架。谢谢camickr。抱歉耽搁了。我试着测试windowForComponent是否是JFrame,但没有成功java.lang.ClassCastException:sun.plugin2.main.client.PluginEmbeddedFrame无法转换为javax.swing.JFrame
Hmmm,使用null将把所有者框架设置为SwingUtilities.getSharedOwnerFrame()
-我将进行测试,谢谢!不幸的是,这并不能解决问题,我只测试了Chrome,它始终显示在页面下方。
JDialog dialog = new JDialog(SwingUtilities.windowForComponent(this));
dialog.setModal(true);
dialog.setSize(200, 200);
dialog.setVisible(true);