将JFrame插入Swing中的Tab

我有一个已经给定的JFrame frame ,我想将它(插入它)显示到JTabbedPanetab中,但这不可能明确地表达:

 frame = new JFrame(); frame.setBounds(100, 100, 450, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainTabs.addTab("Editor", null, frame, null); 

错误是:

 java.lang.IllegalArgumentException: adding a window to a container 

我尝试了一些解决方案,比如将帧插入到JPanel但也是徒劳的。 我有想法将它转换为InternalJFrame但我对此一无所知。

这是插入那个frame任何解决方案吗?

更新

我试过那个解决方案:

  mainTabs.addTab("Editor", null, frame.getContentPane(), null); 

但是我失去了我添加的JMenuBar

您不能将JFrame (或其他顶级组件)添加到另一个组件/容器,但您可以使用frame的getContentPane()方法来获取框架的主面板并将其添加到JTabbedPane选项卡。 像下一个:

 JTabbedPane tabs = new JTabbedPane(); JFrame frame = new JFrame(); frame.add(new JButton("button")); tabs.addTab("1", frame.getContentPane()); 

您也可以将JFrame更改为JPanel并使用它。

阅读JInternalFrame , 顶级容器 。

编辑: getContentPane()不返回任何装饰或JMenuBar ,您需要手动添加此组件,如下一个示例菜单:

 JTabbedPane tabs = new JTabbedPane(); JFrame frame = new JFrame(); JMenuBar bar = new JMenuBar(); bar.add(new JMenu("menu")); frame.setJMenuBar(bar); frame.add(new JButton("button")); JPanel tab1 = new JPanel(new BorderLayout()); tab1.add(frame.getJMenuBar(),BorderLayout.NORTH); tab1.add(frame.getContentPane()); tabs.addTab("1", tab1);