我必须在Java框架(从java应用程序)上重新创建一个X窗口(来自C++应用程序)。这个X窗口必须插入到Java组件树中,这样z顺序才会得到尊重。要做到这一点,我需要理解:
几周的研究..。但我在这些问题上找不到任何资源..。
关于问题1。据我所知,如果我用组件和其他两个框架创建一个java主框架,Swing树应该如下所示:
Frame0
:
:-------------------------------
: : :
Component Frame1 Frame2
:
Component-----------Component关于X窗口树: aach框架是一个很重的组件,所以每个帧都有一个X窗口ID。
Frame0
:
Frame1---------Frame2关于问题2,。我的问题是:如果我在其他组件中的Swing树中间插入一个Applet (所以是一个重量级组件),会发生什么?X窗口会是什么样子?我希望通过这种方式,我可以在Java应用程序上重新创建一个X窗口,并将这个X窗口插入到Java树中。
关于问题3。即使我可以在Java应用程序中重新创建/插入X窗口,我也不确定z顺序是否会得到尊重。事实上,我做了一个尝试,X窗口已经出现在Java框架的所有组件之上。我不确定如何处理窗口/组件堆栈,以及它与java和X窗口树的关系。
发布于 2012-12-14 02:46:13
老实说,自从我做这种事以来,至少已经有12年了。因此,把它当作“值得的”。
首先,树中的每个Swing对象在Swing组件树中都有一个更高的重容器--即使它只是最外层的框架。Swing对象只是XWindow表面上的逻辑绘图区域。
问题1:如果Frame1和Frame2嵌入到Frame0中,则第一种情况下的答案是正确的。否则,它们是独立的XWindows。
问题2:当您在Swing树中插入一个新的重量级组件时,您的新组件将作为包含添加到的Swing组件的绘图面的XWindow的新XWindow组件子组件添加。这是我记忆中最模糊的部分。
问题3: (物质的肉)。XWindow系统首先决定哪些XWindow窗口在每个点都是可见的。然后,在每个XWindow (但不是跨XWindows )中,Swing将在该区域绘制相应的Swing子树。更准确地说,Java为匹配的XWindow画布上的每个重量级组件绘制Swing子树。然后,XWindow服务器根据XWindow树在每个点确定这些画布的哪一部分是可见的。
因此,如果您在Frame0中有一些Swing对象,它比Frame1中使用z级的任何东西都更接近它,但是它是由Frame1重叠的,这并不重要。XWindow排序将获胜,Frame1中的Swing组件将被绘制出来。
注:一旦您理解了这一点,您就可以使用它来提供对Swing对象的“硬”裁剪。
希望这能有所帮助。
https://stackoverflow.com/questions/13705808
复制相似问题