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上重新完成了所有工作,这对我来说不可能在短时间内提交我的最终项目。
如果您希望将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)
但是,请再次注意,这是一种污点并带有潜在的陷阱。