/ / JInternalFrameを使わずにjDesktopPaneでjFrameを呼び出す方法 - java、swing、デスクトップアプリケーション、netbeans-7、jinternalframe

JInternalFrameを使わずにjDesktopPaneでjFrameを呼び出す方法 - java、swing、desktop-application、netbeans-7、jinternalframe

自分に割り当てられたプロジェクトを完了しました。大学ですが、今私は自分のプロジェクトのためにMDIを作成しようとしています。私は10個のjFrameと1個のメインフォームであるjFrameを使いました。その後、メニューバー、jFrameを呼び出すための10個のjButton、およびjFrameを呼び出すための1個のjDesktopPaneを追加します。以下のコードは、10個すべてのjButtonでjFrame placeをjDesktopPaneに呼び出すために使用します。

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try
{
asd t = new asd();
dskp.add(t);
t.setVisible(true);

}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, ex);
}
}

しかし、私と一緒に働いていないと以下のエラーメッセージを出して:

java.lang.illegalargumentexception: adding a window to a container

これを行う方法とこの問題を解決する方法すべてのjInternal Frameを使用することはできないと思います。コード付きのフルGUIやjInternal Frameでのすべての作業をやり直すことはできません。私の最終プロジェクトを提出する時間の

回答:

回答№1は4

WindowsをJDesktopPaneに配置する場合は、JInternalFramesを使用する必要があります。これが魅力的かどうかに関係なく、これが最善の解決策です。

このレッスンではあなたが努力するべきであるということですSwingコンポーネント、特にJFrameなどのトップレベルコンポーネントを拡張するクラスの作成を避け、代わりにJPanel、JFrame、JInternalFrame、JDialogs、JOptionPanes、その他のJPanelなどに配置できる柔軟性のあるコンポーネントを作成するクラスを作成します。 ..

kludgeはcontentPaneをから取得することです。あなたのJFrameをJInternalFrameに入れ、それをJDesktopPaneに入れるか、JInternalPanesのcontentPaneをJFrameからのcontentPaneに設定します。

asd t = new asd();
JInternalFrame internalFrame = new JInternalFrame();
internalFrame.setContentPane(t.getContentPane());
internalFrame.pack();

// set the internalFrame"s location
// ...

internalFrame.setVisible(true);
dskp.add(internalFrame);

しかし、これもまたごみであり、潜在的な罠を抱えていることに注意してください。