如何在javafx8中获取节点句柄

时间:2017-12-20 06:37:35

标签: java javafx hwnd

我们正在Windows中构建JavaFX应用程序。

我尝试使用适用于Native.getComponentPointer()的JNA java.awt.panel方法,但我无法通过javafx.scene.layout.Pane <找出一个好方法/ p>

有没有人知道有什么方法可以为一个窗格获取hWnd?

2 个答案:

答案 0 :(得分:2)

不幸的是,我不认为JavaFX可以实现这一点。我能看到的唯一具有本地同伴的是舞台。您可以使用ui分析工具(例如WinSpy)或&#34; inspect.exe&#34;来自行验证。或&#34; visualuiaverifynative.exe&#34;来自Windows SDK。

来自Mixing Heavyweight and Lightweight Components by Oracle

  

Java编程语言中有两种图形组件:重量级和轻量级。重量级组件与其自己的本机屏幕资源(通常称为对等)相关联。 java.awt包中的组件(如Button和Label)是重量级组件。

     

[...]

     

轻量级组件没有自己的原生屏幕资源,因此它更轻。&#34;轻量级组件依赖于包含层次结构中的祖先的屏幕资源,可能是底层的Frame对象。 javax.swing包中的组件(如JButton和JLabel)是轻量级组件。

在这种情况下,JavaFX就像Swing;一个轻量级的工具包,其中各种ui组件都是用Java编写的,没有本地对等。

答案 1 :(得分:1)

就我对the doc的阅读而言,hWnd与窗口对象之间存在1:1的关系。窗格和节点不是Windows,因此尝试获取一个特定节点的节点似乎没有多大意义。

您可以要求的最多是包含节点的窗口的hwnd。见:

将答案中的函数应用于链接的问题:

Pointer hwnd = getWindowPointer(node.getScene().getWindow());