2012-12-06 35 views
1

我完成了我在大學時分配給我的項目,但現在我正在嘗試爲我的項目創建MDI。我使用了10個jFrame和一個也是jFrame的主表單,之後我添加了一個菜單欄,10個用於調用jFrame的jButton和一個用於調用jFrame的jDesktopPane。下面的代碼使用調用JFrame的地方變成JDesktopPane的所有10個JButton的:如何在不使用JInternalFrame的情況下在jDesktopPane上調用jFrame

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框架。我認爲在這一點上我不能使用jInternale Frame,因爲我所有的工作都在jFrame上完成,比如帶有代碼的完整GUI,並且重新完成jInternal Frame的所有工作,因爲我沒有時間提交我的最終項目。

+1

請儘量避免在您的帖子中不必要地使用非標準縮寫。這有幾個原因,值得注意的是編程是精確的練習。當您在此處(或任何地方)就編程問題和問題進行溝通時,您希望此溝通儘可能清晰,以避免模糊不清。我會說至少有一半在這個網站上的通信是要求澄清。讓我們避免這一點。 –

+0

首先感謝您的幫助,接下來我會關心它...... –

回答

4

如果您希望將窗口放入JDesktopPane,那麼您需要使用JInternalFrames。無論是否吸引你,這都是你的最佳解決方案。

在這方面的一個教訓是,你要努力避免創建擴展Swing組件,尤其是頂級部件,如JFrames,而是創建生產JPanels,有足夠靈活性的組件類的類被放置在任何地方,如到JFrames,JInternalFrames,JDialogs,JOptionPanes,其他JPanels等...

請注意,kludge是從您的JFrame中獲取contentPane,將其放入JInternalFrame中並將其放入到JDesktopPane中, JInternalPanes的contentPane與來自JFrame的內容。即,

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); 

但同樣注意,這是一個雜牌並進行潛在的陷阱。

+1

有一個相關示例[here](http://stackoverflow.com/a/4091329/230513)。 – trashgod

+0

感謝您的幫助和良好的工作對我來說...... –

+0

@AyazAli:很高興你有它的工作! –

相關問題