簡體   English   中英

如何在不使用JInternalFrame的情況下在jDesktopPane上調用jFrame

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM