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

时间:2012-10-17 04:27:32

标签: java swing jframe jpanel

我有一个像这样的开源java swing应用程序: enter image description here http://i47.tinypic.com/dff4f7.jpg

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

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

示例说明如下:

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

enter image description here 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的子类)

4 个答案:

答案 0 :(得分:6)

您希望嵌入框架的内容,而不是尝试嵌入框架。

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

菜单栏由框架RootPane控制。

为您创建一个新的JPanel。将其布局设置为BorderLayout

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

获取帧ContentPane并将其添加到面板的中心位置。

毫无疑问,你会遇到无数其他特定于应用程序的问题......

答案 1 :(得分: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
我想我已经看到了你要做的事情 - 而不是JFrame和JDialogs,使用JPanels并使用CardLayout交换它们,这将允许你交换视图

答案 2 :(得分:0)

我浏览了源代码,我看到AWindow.java有内部面板(APanel.java)来保存窗口的内容,它还有一个公共方法来返回内容面板对象(getAPanel())。有了这个,我可以用它来将窗口的内容提取到其他容器中。

最后,我决定在VTreePanel的右侧区域使用JTabbedPane来显示弹出窗口的内容。

答案 3 :(得分:0)

您无法将Jframe放入JPanel。相反,您应该尝试创建一个具有JFrame等功能的单独面板,并将其嵌入到JPanel中。 因为您可以将JPanel放入另一个JPanel但不将JFrame放入另一个JPanel