如何在不使用JInternalFrame的情况下在jDesktopPane上调用jFrame

Aya*_*Ali 2 java swing desktop-application jinternalframe netbeans-7

我完成了由大学分配给我的项目,但是现在我正在尝试为我的项目创建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);
      }
    } 
Run Code Online (Sandbox Code Playgroud)

但无法与我合作,并给出以下错误消息:

java.lang.illegalargumentexception: adding a window to a container
Run Code Online (Sandbox Code Playgroud)

如何执行此操作并解决此问题,因为我没有使用任何jInternal Frame。我认为在此我无法使用jInternale Frame,因为我在jFrame上完成了所有工作,例如使用代码编写完整的GUI,并在jInternal Frame上重新完成了所有工作,这对我来说不可能在短时间内提交我的最终项目。

Hov*_*els 5

如果您希望将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);
Run Code Online (Sandbox Code Playgroud)

但是,请再次注意,这是一种污点并带有潜在的陷阱。