我有一个已经给定的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
(或另一个顶级组件)添加到另一个组件/容器中,但您可以使用框架的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);