将JFrame插入Swing中的Tab
我有一个已经给定的JFrame frame
,我想将它(插入它)显示到JTabbedPane
的tab
中,但这不可能明确地表达:
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);