2011-12-07 12 views
3

私は、Preferences.javaというJDialogクラスを持っています。私は私がボタンにアクションリスナーを登録たJFrame form.Afterからボタンをクリックすると、この設定ダイアログボックスが開きたい私のプログラムで例外:コンテナにウィンドウを追加する方法を解決するには?

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

、私が書いた:このクラスは、コンストラクタのように作成されます以下のように内部コード:

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

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

私はこのコードを実行すると、私は次の例外(私はボタンをクリックすると)を取得

これはどういう意味ですか、これをどのように解決できますか?

+4

[トップレベルコンテナ](http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html)を別のものに追加することはできません。また、AWT&Swing 。 – trashgod

答えて

12

これは何を意味している。..

1個のトップレベルのコンテナ(ダイアログ)が、別の(フレーム)に追加することはできません。

と私はこれをどのように解決できますか?

Preferencesダイアログで、setVisible(true)を追加するのではなく、電話するだけです。

私は、スイングチュートリアルを行うことに同意します。ランダムなコードを一緒に投げているように思えます。

4

JDialogおよびJFrameは、top-level containerです。 JFrameJInternalFrameJDesktopPaneを使用する必要があることをお勧めします。

6

あなたはadd(...)方法がコンテナでは、ないコンテナで表示するコンポーネントを追加するためのものですので、全く理にかなっていないこと、JFrameのに使って、JDialogを追加しないでください。 JFrameのJButtonのActionListenerからJDialogを表示します。 AWT(フレーム)コンポーネントとSwingコンポーネントを混在させてはいけません。

あなたの質問は、Swingチュートリアルを進めることで大きなメリットがあることを示唆しています。

+1

彼は実際にJFrameではなくFrameに追加しようとしていました。あなたの意見に大きな違いがあるわけではありません。 – LarsH

関連する問題