例外:コンテナにウィンドウを追加します。それを解決する方法は?
-
29-10-2019 - |
質問
私は持っています 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
, JInternalFrame
と JDesktopPane
.
所属していません StackOverflow