如何在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);