例外:向容器添加窗口如何解决?

我有一个名为Preferences.javaJDialog类。 这个类创建一个构造函数,如:

 class Preferences extends javax.swing.JDialog { Preferences(java.awt.Frame parent,modal) { super(parent,modal); //...... } } 

在我的程序中,我希望这个首选项对话框打开,因为我从Jframe表单单击一个按钮。我在按钮上注册了动作监听器后,我在里面写了代码:

 Frame fr = new Frame(); Preferences p = new Preferences(fr,false); fr.add(p); fr.setVisible(true); 

当我运行此代码时,我得到以下exception(因为我单击按钮)

 Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding a window to a container 

这是什么意思,我该如何解决这个问题?

这是什么意思..

一个顶级容器(对话框)无法添加到另一个(框架)。

..我怎么能解决这个问题?

只需在“ Preferences对话框中调用setVisible(true) ,而不是添加它。

我同意做Swing教程。 你好像把随机代码扔在一起,希望它能起作用。

您没有将JDialog添加到JFrame,这没有任何意义,因为add(...)方法用于添加要容器中显示的组件,而不是容器。 您可以从JFrame的JButton的ActionListener中显示JDialog。 您也不应该将AWT(Frame)组件和Swing组件混合在一起,这是没有充分理由的。

您的问题表明,通过Swing教程,您将获益匪浅。

JDialog和JFrame是顶级容器 。 我建议您必须使用JFrameJInternalFrameJDesktopPane