4

我有一个JDialog名为Preferences. 此类创建一个构造函数,例如:

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 in thread "AWT-EventQueue-0" 
    java.lang.IllegalArgumentException: adding a window to a container

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

4

3 回答 3

14

这是什么意思..

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

..我该如何解决这个问题?

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

于 2011-12-07T05:09:27.657 回答
6

您不会将 JDialog 添加到 JFrame,这没有任何意义,因为该add(...)方法是用于添加要容器中显示的组件,而不是通过容器。您从 JFrame 的 JButton 的 ActionListener 显示 JDialog。您也不应该无缘无故地将 AWT(框架)组件和 Swing 组件混合在一起。

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

于 2011-12-07T05:07:46.310 回答
4

JDialog 和 JFrame 是顶级容器。我建议您应该使用JFrame,JInternalFrameJDesktopPane.

于 2011-12-07T05:06:45.557 回答