2013-03-10 94 views
0

我有一個名爲「Menu_Project」的框架。在JDesktopPane中添加一個外框Java

我有另一個名爲「Main_Menu」的框架,它有一個JButton,當點擊按鈕時,我想調用JDesktopPane中的框架「Menu_Project」。我嘗試了在YouTube上看到的教程在此鏈接:https://www.youtube.com/watch?v=TUL3qEoZkR4

當我運行它,我得到:

" Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding a window to a container" 

我的代碼:

import java.awt.BorderLayout; 


public class Menu extends JFrame { 

private JPanel contentPane; 
private JDesktopPane desktopPane; 
private JButton btnNewButton; 
private Menu_Modifications_Single m1; //The Frame to be added 
/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       Menu frame = new Menu(); 
       frame.setVisible(true); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 
} 

/** 
* Create the frame. 
*/ 
public Menu() { 
    initComponents(); 
    createEvents(); 
} 
private void initComponents(){ 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 1706, 995); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 

    btnNewButton = new JButton("Analyze Single"); 


    desktopPane = new JDesktopPane(); 
    desktopPane.setBackground(SystemColor.window); 
    GroupLayout gl_contentPane = new GroupLayout(contentPane); 
    gl_contentPane.setHorizontalGroup(
     gl_contentPane.createParallelGroup(Alignment.LEADING) 
      .addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup() 
       .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
       .addComponent(desktopPane, GroupLayout.PREFERRED_SIZE, 1597, GroupLayout.PREFERRED_SIZE)) 
      .addGroup(gl_contentPane.createSequentialGroup() 
       .addContainerGap() 
       .addComponent(btnNewButton) 
       .addContainerGap(1496, Short.MAX_VALUE)) 
    ); 
    gl_contentPane.setVerticalGroup(
     gl_contentPane.createParallelGroup(Alignment.LEADING) 
      .addGroup(gl_contentPane.createSequentialGroup() 
       .addComponent(btnNewButton) 
       .addGap(18) 
       .addComponent(desktopPane, GroupLayout.DEFAULT_SIZE, 823, Short.MAX_VALUE)) 
    ); 
    GroupLayout gl_desktopPane = new GroupLayout(desktopPane); 
    gl_desktopPane.setHorizontalGroup(
     gl_desktopPane.createParallelGroup(Alignment.LEADING) 
      .addGap(0, 1597, Short.MAX_VALUE) 
    ); 
    gl_desktopPane.setVerticalGroup(
     gl_desktopPane.createParallelGroup(Alignment.LEADING) 
      .addGap(0, 823, Short.MAX_VALUE) 
    ); 
    desktopPane.setLayout(gl_desktopPane); 
    contentPane.setLayout(gl_contentPane); 
} 
private void createEvents(){ 
    btnNewButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      if(m1==null){ 
      m1 = new Menu_Modifications_Single(); 
      desktopPane.add(m1); 

      } 
     } 
    }); 

} 
} 

任何人都可以指出哪裏是錯的.Am遵循視頻教程。

回答

2

您應該在JDesktopPane中使用輕量級JInternalFrame而不是JFrame

您可以輕鬆地 修改代碼:

if(m1==null){ 
    m1 = new Menu_Modifications_Single(); 
    desktopPane.add(m1); 
} 

要:

if(m1==null){ 
    m1 = new Menu_Modifications_Single(); 
    JInternalFrame iFrame = 
      new JInternalFrame("Internal Frame", true, true, true, true);  
      /* give the same contents of m1 */ 
    iFrame.setContentPane(m1.getContentPane());  
      /* additional Integer argument, required by JDesktopPane 
       (although not strictly required) */ 
    desktopPane.add(iFrame, new Integer(0));  
} 
+0

在看這個例子: http://www.java2s.com/Tutorial/Java/0240__Swing/ AddingInternalFramestoaJDesktopPane.htm 但如何將其他框架的實例添加到它。我卡住了 – 2013-03-10 07:29:47

+0

我只在這條線上出現錯誤: iFrame.setRootPane它以紅色突出顯示。 – 2013-03-10 07:45:32

+0

這是什麼意思? (希望你明白,這是來自我的大腦...沒有測試。) – Mordechai 2013-03-10 07:47:56

相關問題