例外:向容器添加窗口.怎么解决?

Suh*_*pta 3 java swing exception jdialog illegalargumentexception

我有一个JDialog名为的班级Preferences.这个类创建一个构造函数,如:

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

在我的程序中,我希望在单击JFrame表单中的按钮时打开此首选项对话框.在按钮上注册动作监听器后,我将代码写入:

Frame fr = new Frame();
Preferences p = new Preferences(fr,false);
fr.add(p);
fr.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我得到以下异常(当我单击按钮时):

Exception in thread "AWT-EventQueue-0" 
    java.lang.IllegalArgumentException: adding a window to a container
Run Code Online (Sandbox Code Playgroud)

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

And*_*son 13

这是什么意思..

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

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

只要叫setVisible(true)Preferences对话,而不是添加它.


Hov*_*els 6

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

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