将包含 Swing 面板从一个容器移动到另一个容器后,OfficeBean 不会显示

Posted

技术标签:

【中文标题】将包含 Swing 面板从一个容器移动到另一个容器后,OfficeBean 不会显示【英文标题】:OfficeBean won't display after moving containing Swing Panel from one Container to another 【发布时间】:2010-06-23 09:53:29 【问题描述】:

我正在开发一个 Java 6 小程序,它允许用户查看 OO (v.3.2) 文档(只读),如果他们选择,单击一个按钮以启动一个新的 JDialog 窗口,其中显示的文档允许用户根据需要标记和编辑它。完成后,他们可以关闭 JDialog,它将文档保存到服务器并在原始小程序窗口中重新显示更新的文档(再次只读)

我猜我可以使用嵌入在 Swing 面板中的单个 OfficeBean 实例来完成此操作。但是,单击“编辑”按钮时,我似乎无法成功地将面板(包含 OfficeBean)从小程序移动到 JDialog。我得到的只是文档应该在的 JDialog 中的空白区域。我没有收到任何错误。

我目前已设法通过在每次需要显示文档时创建 OfficeBean 的新实例来解决此问题(加载小程序时,再次当用户选择编辑并在 JDialog 中打开它时,以及最后,当他们在对话框中单击“保存”并且编辑的结果再次显示在小程序中时。)然而,这意味着往返于文档来源的服务器的三次行程。这对我来说似乎很生气。

我绝不是 Swing 专家,很可能会犯一个愚蠢的错误。但是,我做了很多摆弄、调试和谷歌搜索,但似乎无法让它工作。任何人都可以帮助我吗?我是否正在尝试做一些根本不可能的事情?我希望不会。

【问题讨论】:

【参考方案1】:

Swing 中的一条规则是,一个组件一次只能显示/附加到 gui“树”的一部分。当您将组件“移动”到对话框时,您是否首先将其从小程序中移除?

【讨论】:

谢谢@jowierun。不幸的是,我已经在这样做了(但在你的提示之后我还是检查了。)我一直在做更多的挖掘(用更简单的版本刮牦牛),看来我需要调用 OfficeBean 方法 aquireSystemWindow() 才能让事情正常工作。问题是,当我在 JDialog 中调用它时,我得到一个 com.sun.star.comp.beans.SystemWindowException

以上是关于将包含 Swing 面板从一个容器移动到另一个容器后,OfficeBean 不会显示的主要内容,如果未能解决你的问题,请参考以下文章

一个 Swing 组件不能添加到多个容器中吗?

我可以将 CKRecords 从一个 CKContainer 移动到另一个 CKContainer 吗?

C#:使用 Azure.Storage.Blobs 客户端库将 blob 从一个容器移动到另一个容器

(转载) Java Swing 之 JScrollPane (滚动面板) 使用方法

如何执行从视图容器到另一个外部视图的转场?

JavaSE基础(十 二 )---<GUI>GUI概述,Swing,容器组件,窗口,面板,布局管理器