簡體   English   中英

父級並將X窗口插入Java組件樹

[英]Reparent and insert a X-Window into the Java component tree

我必須在Java框架(來自Java應用程序)上重載X窗口(來自C ++應用程序)。 該X窗口必須插入Java組件樹中,以便遵守z順序。 為此,我需要了解:

  1. 首先,由Java應用程序創建的組件樹和匹配的X-Window樹之間的確切關系。
  2. 其次,由於有了父母,我是否以及在哪里可以在Java樹上插入X窗口。
  3. 第三,處理窗口/組件堆棧的方式:哪個窗口/組件將位於另一個窗口/組件之上。

幾周的研究...但是我找不到關於這些問題的任何資源...

關於問題1 據我了解,如果我用組件和另外兩個框架創建一個Java主框架,則Swing樹應如下所示:

                                Frame0
                                   :
                                   :-------------------------------
                                   :               :              :
                               Component         Frame1         Frame2
                                   :
                     Component-----------Component

關於X窗口樹:每個框架都是一個重量級組件,因此每個框架都有一個X窗口ID。 因此,X窗口樹可能如下所示:

                                Frame0
                                   :
                         Frame1---------Frame2

關於問題2 我的問題是:如果我在其他組件之間的Swing樹的中間插入一個Applet(如此重的組件)會發生什么? X窗口是什么樣的? 我希望通過這種方式,我可以在Java應用程序上重新創建X-Window,並將該X-Window插入Java樹中。

關於這個問題3 即使可以將X窗口重定位/插入Java應用程序中,我也不確定z順序是否會得到遵守。 實際上,我進行了試用,並且X-Window已出現在Java Frame所有組件的頂部。 我不確定要了解窗口/組件堆棧的處理方式及其與Java和X-Window樹的關系。

誠實的披露-自從我做這種事情已經過去了至少十二年。 因此,將其視為“為了它的價值”。

首先,樹中的每個Swing對象在Swing組件樹中都有一個較重的容器-即使它只是最外面的框架。 Swing對象只是該XWindow表面上的邏輯繪圖區域。

問題1:如果將Frame1和Frame2嵌入Frame0中,則第一種情況的答案是正確的。 否則,它們是獨立的XWindows。

問題2:在Swing樹中插入新的重量級組件時,您的新組件將作為XWindow的新XWindow組件子級添加,其中包含要添加到其中的Swing組件的繪圖表面。 這是我記憶最模糊的答案的一部分。

問題3 :(問題的實質)。 XWindow系統首先確定在每個點可見的XWindow窗口。 然后,在每個XWindow中,但不在整個XWindows中,Swing繪制在該區域中繪制相應的Swing子樹。 更准確地說,Java在匹配的XWindow畫布上為每個重量級組件繪制了Swing子樹。 然后,XWindow服務器僅基於XWindow樹來確定這些畫布的哪一部分在每個點都可見。

因此,如果在Frame0中有一些Swing對象比使用z順序的Frame1中的對象更靠近查看器,但是與Frame1重疊,則它就不重要了。 XWindow順序將獲勝,並且將繪制Frame1中的Swing組件。

注意-了解這一點后,您可以使用它來提供“硬” Swing對象的裁剪。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM