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 は最上位のコンテナです。JFrameJInternalFrameおよびを使用する必要があることをお勧めしますJDesktopPane

于 2011-12-07T05:06:45.557 に答える