小编典典

将JFrame插入Swing中的标签

java

我有一个给定的JFrame frame,我想将其显示(插入)到的tabJTabbedPane,但这不可能像这样明确地实现:

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我添加的内容。


阅读 218

收藏
2020-11-01

共1个答案

小编典典

您不能将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);
2020-11-01