4

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

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

现在,我试图将弹出窗口放到 JPanel 的右侧区域,这意味着不再有弹出窗口,即当我单击SLA Criteria链接时,其内容将显示在右侧区域面板。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 的子类)

4

4 回答 4

6

与其尝试嵌入框架,不如嵌入框架的内容。

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

菜单栏由框架的RootPane.

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

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

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

毫无疑问,您在尝试执行此操作时会遇到无数其他特定于应用程序的问题……

于 2012-10-17T04:40:40.503 回答
5

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


编辑 1
您声明:

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

您正在寻找的是在 JList 或 JTable 中简单地实现 MouseListener,并在响应单击时根据所做的选择获取内容。这与在 JPanel 中放置 JFrame 无关,而是与编写正确的程序逻辑有关。同样,在模态 JDialog 中显示它——但这对于您编写正确的非 GUI 逻辑是次要的。你真的在这里吠错了树。忘掉 JFrame,暂时忘掉 JPanel,而是专注于在单击 SLA 标准数据时如何提取它。


编辑 2
我想我明白了你想要做什么——而不是 JFrames 和 JDialogs,使用 JPanels 并使用允许你交换视图的CardLayout交换它们。

于 2012-10-17T04:29:36.720 回答
0

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

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

于 2012-10-17T14:40:49.187 回答
0

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

于 2015-10-19T05:30:42.630 回答