質問

私は持っています 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

これは何を意味し、どうすればそれを解決できますか?

役に立ちましたか?

解決

これは何を意味するのでしょうか..

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

..そしてどうすればこれを解決できますか?

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

他のヒント

JDialogをJFrameに追加しないでください。 add(...) 方法は、表示するコンポーネントを追加するためのものです コンテナではありません コンテナ。 JFrameのJButtonのActionListenerからJDialogを表示します。また、理由もなくAWT(フレーム)コンポーネントを混合し、コンポーネントを一緒にスイングするべきではありません。

あなたの質問は、スイングのチュートリアルを通過することで大きな恩恵を受けることを示唆しています。

jdialogとjframeはそうです トップレベルのコンテナ. 。使用する必要があることをお勧めします JFrame, JInternalFrameJDesktopPane.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top