我已经给出了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
。
答案 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
并使用它。
了解JInternalFrame
,top-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);