将JFrame插入Swing中的Tab键

时间:2013-12-10 07:46:31

标签: java swing jframe jtabbedpane

我已经给出了JFrame frame,我希望将其显示(插入)tab JTabbedPane,但这不可能明确地表达:

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

1 个答案:

答案 0 :(得分:3)

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

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

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

了解JInternalFrametop-level containers

编辑: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);