如何将JFrame放入Java Swing中的现有JPanel?

nul*_*ull 4 java swing jpanel jframe

我有一个像这样的开源java swing应用程序: 在此输入图像描述 http://i47.tinypic.com/dff4f7.jpg

你可以在截图中看到,有一个JPanel分为左右两个区域.左侧区域有许多文本链接.当我单击SLA Criteria链接时,它将弹出SLA Criteria窗口.弹出窗口是JFrame对象.

现在,我试图将弹出窗口放到JPanel的右侧区域,这意味着不再有弹出窗口,即当我单击SLA Criteria链接时,其内容将显示在右侧区域. JPanel的.JPanel右侧区域的现有内容将不再使用.这个概念与java api文档页面中的相同:http://docs.oracle.com/javase/6/docs/api.单击左框中的链接,您将获得右框显示的内容.

示例说明如下:

(注意:它是使用图像编辑器制作和编辑的,这不是工作应用程序的真实截图)

在此输入图像描述 http://i48.tinypic.com/5vrxaa.jpg

那么,我想知道有没有办法将JFrame放入JPanel?

我正在考虑使用JInternalFrame,这可能吗?或者还有另一种方式吗?

更新:
源代码:
http ://pastebin.com/tiqRbWP8(VTreePanel.java,这是左右区域分区的面板)
http://pastebin.com/330z3yuT (CPanel.java,这是VTreePanel的超类并且也是JPanel的子类)
http://pastebin.com/MkNsbtjh (AWindow.java,这是弹出窗口)
http://pastebin.com/2rsppQeE (CFrame.java,这是AWindow的超类,也是来自JFrame的子类)

Mad*_*mer 6

您想要嵌入框架的内容,而不是尝试嵌入框架.

我可以看到(至少)一个问题.

菜单栏由框架控制RootPane.

创造你自己是一个新的JPanel.将它的布局设置为BorderLayout.

从框架中获取菜单栏(使用JFrame#getJMenuBar)并添加到新面板的北部位置.

获取框架ContentPane并将其添加到面板的中心位置.

毫无疑问,你会遇到无数其他特定于应用程序的问题,试图做到这一点......


Hov*_*els 5

不,您不想"将JFrame放入JPanel",上面的插图也没有证明这一点.相反,它在另一个窗口的顶部(不在其内部)显示一个从属窗口.如果您绝对需要显示一个新的从属窗口,我建议您创建并显示一个JDialog.这些教程将解释如何执行此操作,或者如果您在代码尝试中遇到困难,我们将帮助您解决此问题.


编辑1
您说明:

我需要从弹出窗口样式转换为jpanel内容样式.它就像java api文档页面样式:docs.oracle.com/javase/6/docs/api当你单击左框中的文本时,它不会显示任何弹出窗口,对吧?内容直接显示在右侧框架中.所以这基本上就是我的目标.源代码非常大.如果可能,我会尝试粘贴源代码.

您正在寻找的是简单地在JList或JTable中实现MouseListener,并且当响应单击时获取基于所做选择的内容.这与将JFrame放在JPanel中无关,而与编写正确的程序逻辑有关.再次,将它显示在一个模态JDialog中 - 但这对于编写正确的非GUI逻辑来说都是次要的.你真的在这里咆哮错误的树.忘记JFrames,暂时忘掉JPanels,而是专注于点击它时如何提取SLA Criteria数据.


编辑2
我想我看到你要做的 - 而不是JFrames和JDialogs,使用JPanels并使用CardLayout交换它们,这将允许你交换视图.