Windows下使用JDK1.6进行SWING开发,需要获得当前窗体(如JPanel)的HWND?网上可以搜到的使用DrawingSurfaceInfo的方法,似乎在1.4以后已经失效了。不知道哪位有比较好的,确保可以使用的方法能够提供。谢谢!

解决方案 »

  1.   

    C吧。 写个dll. 使用WindowsApi
    FindWindow(NULL,_T("你的窗口标题"));
      

  2.   

    设JPanel 为p
    JComponent c=p;
    while(! c instanceof JFrame)
     c=c.getParent();
      

  3.   

    HWND?
    java里没有这个概念的
    你vc用多了吧
      

  4.   

    不知道windows程序的 HWND  java中有没有
      

  5.   

    HWND是VC里的概念,一定要的话用JNI调吧
      

  6.   

    我使用JAVA SWING写了一个主窗体,其中有一个用于进行三维渲染的JPanel。我使用OpenGL写了一个C++的动态链接库,通过SWIG转化为JAVA可以调用的形式。现在希望能够获得这个JPanel的窗体本地句柄,然后传给这个C++写的链接库,然后OpenGL渲染在我指定的这个JPanel上。因此,我想知道,在Linux/Windows下,如何获得SWING窗体的本地句柄。如果这个方案不行,我希望有人能提供个我一个别的替代方案。谢谢!!
      

  7.   

    没看明白你到底是要得到JPanel的Handle还是JPanel所在JFrame的Handle.
    首先,swing 的大部分组件都是swing自己画出来的。 底层windows根本不知道这些组件。所以windows中也就没有它们的Handle.   JPanel 好像(记得好像是)就是这样的一个组件,它是一个轻量级的。但是JFrame 不是的,你可以 windows 中找到它的Handle.用java 实在不知道如何能得到JFrame的Handle. 不过,用 VC写一个很简单的DLL是可以实现的。核心代码就是FindWindow(NULL,_T("window title")) 这个windows api,它返回的结果就是 HWND . 用JNI 调这个Dll就可了。 我刚刚试过,完全可以实现。 
    另外可以考虑 SWT . 他的实现机制是不同于swing的。 
      

  8.   

    嗯,谢谢楼上的回复,我也做了类似的实验。发现JPanel无法完成我所需要的功能。我采用SWT来实现了。
      

  9.   

    AWT的窗体也是本地的控件,是否有办法能够获得AWT窗体的句柄呢?我看了网上的一些资料,都是通过获得同位体的方法来实现的,但在现在的JDK中已经不允许用户直接操作同位体了,DrawingSurface也无法获得了。还有什么办法可以用来获得AWT控件的句柄呢?