在Swing中将JFrame插入到选项卡中



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

最新更新