[英]how to call jFrame on jDesktopPane without using JInternalFrame
我完成了由大學分配給我的項目,但是現在我正在嘗試為我的項目創建MDI。 我使用了10個jFrame和一個也是jFrame的主要形式,之后添加了一個菜單欄,10個用於調用jFrame的jButton和一個jDesktopPane用於調用jFrame的方法。 下面的代碼用於在所有10個jButton中將jFrame放置到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。 我認為在此我無法使用jInternale Frame,因為我在jFrame上完成了所有工作,例如使用代碼編寫完整的GUI,並在jInternal Frame上重新進行了所有工作,這對於我來說不可能在短時間內提交我的最終項目。
如果您希望將Windows放入JDesktopPane中,則需要使用JInternalFrames。 無論是否吸引您,這都是您最好的解決方案。
這方面的一個教訓是,您應努力避免創建擴展Swing組件(尤其是頂級組件,例如JFrames)的類,而應創建生成JPanels的類,這些組件足夠靈活以放置在諸如JFrames,JInternalFrames之類的任何位置,JDialogs,JOptionPanes,其他JPanels等...
請注意,合並是從JFrame中獲取contentPane,將其放入JInternalFrame中,然后將其放入JDesktopPane中,或者使用JFrame中的內容來設置JInternalPanes的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);
但是,請再次注意,這是一種污點並帶有潛在的陷阱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.