在JPanel中嵌入HWND(窗口句柄)

4

我正在尝试将一个HWND(窗口句柄)嵌入到一个JPanel中。

实际上,我可以将我的HWND嵌入到一个JFrame中,但嵌入的窗口总是位于其他组件之上,我无法移动它。如果我尝试删除JFrame的所有子组件,则HWND仍然存在。HWND似乎是在JFrame顶部绘制而不是作为其子组件之一。

为了将HWND嵌入JPanel中,我使用JNA通过User32:

User32.SetParent(iage.getRenderHwnd(), (int) getGUIHwnd(j));

我使用以下代码获取我的JFrame的HWND:

j.getPeer() != null ? ((WComponentPeer) j.getPeer()).getHWnd(): 0;

有没有一种方法可以将HWND嵌入到JPanel中或将其添加到其他组件中,以便我可以在UI中按照自己的意愿定位它?
谢谢
1个回答

7

JPanels是轻量级组件(它们没有真正的本地对等体)。即它们已经使用了(J)Frame的句柄。请参考java.awt.Canvas。


非常感谢,我可以将我的HWND链接到画布上,并随后将其添加到JPanel中。 - Etienne
1
不用谢!记住:在轻量级容器中混合重量级组件(例如在JPanel中使用Canvas)可能会导致许多意外效果。尽管Java在这方面进行了一些改进,但仍需小心。我已经有9年没有使用过重量级组件了。 - bestsss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接