Swing 在Java组件树中重新生成并插入一个X窗口 我必须在java框架(java应用程序)上重新生成一个X窗口(C++应用程序)。必须将这个X窗口插入Java组件树中,这样z顺序才是正确的。为此,我需要了解: 首先,由创建的组件树之间的确切关系 Java应用程序和匹配的X窗口树 第二,是否以及在何处可以在Java上插入X窗口 多亏了这棵树 第三,处理窗口/组件堆栈的方式:哪个窗口/组件将位于另一个窗口/组件之上

Swing 在Java组件树中重新生成并插入一个X窗口 我必须在java框架(java应用程序)上重新生成一个X窗口(C++应用程序)。必须将这个X窗口插入Java组件树中,这样z顺序才是正确的。为此,我需要了解: 首先,由创建的组件树之间的确切关系 Java应用程序和匹配的X窗口树 第二,是否以及在何处可以在Java上插入X窗口 多亏了这棵树 第三,处理窗口/组件堆栈的方式:哪个窗口/组件将位于另一个窗口/组件之上,swing,jframe,x11,reparenting,Swing,Jframe,X11,Reparenting,几周的研究。。。但我在这些问题上找不到任何资源 关于问题1。据我所知,如果我创建一个包含组件和其他两个框架的java主框架,Swing树应该如下所示: Frame0 : :-------------------------------

几周的研究。。。但我在这些问题上找不到任何资源

关于问题1。据我所知,如果我创建一个包含组件和其他两个框架的java主框架,Swing树应该如下所示:

                                Frame0
                                   :
                                   :-------------------------------
                                   :               :              :
                               Component         Frame1         Frame2
                                   :
                     Component-----------Component
                                Frame0
                                   :
                         Frame1---------Frame2
关于X-Window树:aach框架是一个重量级组件,因此每个框架都有一个X-Window ID。因此X-Window树可以如下所示:

                                Frame0
                                   :
                                   :-------------------------------
                                   :               :              :
                               Component         Frame1         Frame2
                                   :
                     Component-----------Component
                                Frame0
                                   :
                         Frame1---------Frame2
关于问题2。我的问题是:如果我把一个applet(那么一个重量级组件)插入到摆动树的中间?X窗口是什么样子的?我希望通过这种方式,我可以在Java应用程序上重新租用一个X窗口,并且这个X窗口将被插入Java树中


关于问题3。即使我可以将X窗口重新分配/插入Java应用程序,我也不确定z顺序是否会得到尊重。事实上,我做了一次尝试,X窗口出现在Java框架的所有组件之上。我不确定如何处理窗口/组件堆栈及其与java和X-window树的关系

诚实的披露——我做这种事情至少已经12年了。因此,将此视为“值得的”

首先,树中的每个Swing对象在Swing组件树的更高位置都有一个重量级容器,即使它只是最外层的框架。Swing对象只是XWindow曲面上的逻辑绘图区域

问题1:如果Frame1和Frame2嵌入到Frame0中,您在第一种情况下的答案是正确的。否则它们是独立的XWindows

问题2:在Swing树中插入新的重量级组件时,新组件将作为XWindow的新XWindow组件子级添加,其中包含添加到的Swing组件的绘图面。这是答案中我记忆最模糊的部分

问题3:(关键问题)。XWindow系统首先决定在每个点上哪些XWindow窗口可见。然后,在每个XWindow中,而不是跨XWindow,Swing将在该区域中绘制相应的Swing子树。更准确地说,Java在匹配的XWindow画布上为每个重量级组件绘制Swing子树。然后,XWindow服务器仅基于XWindow树来确定在每个点上这些画布的哪一部分是可见的

因此,如果Frame0中的某个Swing对象比Frame1中的任何对象(使用z顺序)更接近查看器,但它与Frame1重叠,这并不重要。XWindow订购将获胜,并将绘制Frame1中的Swing组件

注意-一旦理解了这一点,就可以使用它来提供Swing对象的“硬”剪裁


希望这有帮助。

Thx!!最后一个答案:-)你的答案正是我所害怕的。。。你知道有什么资源(书籍、网络等)可以让我找到关于这类问题的“官方”解释吗?Thx又一次不幸地没有。我之所以知道它,是因为在Swing的早期,它有太多的bug,我们不得不插入重量级的东西来让事情看起来正常。好的,我对你的答案有一些问题。很抱歉但是,除了你,没有人能回答这个问题;-)。1.你说的嵌入式框架是什么意思?JInternalFrame?但是JInternalFrame不是一个重量级组件,所以在这种情况下,我的图1是错误的。2.如果我理解你。如果我用三个“new JFrame()”创建3个JFrame,我将有3个没有关系的X-Window?抱歉-一夜之间。这就是我记忆有点不好的地方。如果子框架嵌入到外部框架中,则它们通常是一个属于轻型组件的JInternalFrame。但是,如果它们在该框架之外,则需要JFrame,并且它是重量级的。然而,我似乎还记得JFrame也可以嵌入外部框架的情况。我们这样做是为了在Swing中裁剪bug。不幸的是,这是12年前的事了,所以细节都没有了。好吧,qeustion仍然是关于我们是否可以在另一个框架中嵌入框架(我不这么认为,除非在另一个JFrame上重新部署JFrame?!)。但现在我更了解Java树的工作方式。我将用我所了解的数字编辑你的答案。非常感谢!!