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

时间:2011-12-07 05:01:46

标签: java swing exception jdialog illegalargumentexception

我有一个名为JDialog的{​​{1}}类。该类创建一个构造函数,如:

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);

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

3 个答案:

答案 0 :(得分:13)

  

这是什么意思..

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

  

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

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:4)

JDialog和JFrame是top-level container。我建议你必须使用JFrameJInternalFrameJDesktopPane