代码之家  ›  专栏  ›  技术社区  ›  FerranB Tom

如何在C#winforms控件上嵌入Java控件?

  •  2
  • FerranB Tom  · 技术社区  · 17 年前

    我可以将Java控件(SWT、Swing等)放在C#控件上吗?

    我知道使用web控件是可能的,但我不喜欢这种方式。

    5 回复  |  直到 17 年前
        1
  •  2
  •   Vitallis Vitallis    17 年前

    我写了一些例子:

    -.NET WinForm组件嵌入Java GUI。
    您可以在以下产品中找到它们:

    http://www.simtel.net/product.php[id]95126[SiteID]simtel.net
    http://www.simtel.net/product.php[id]98653[SiteID]simtel.net

        2
  •  2
  •   James    17 年前

    您可以使用JNBridge来完成它。

    http://www.jnbridge.com/jnbp-examples.htm#JinN

        3
  •  1
  •   okutane    17 年前

    我已经重新检查过了,看起来IKVM目前在它的尾部组件中没有足够的支持。我认为唯一的方法是在单独的进程中运行java控件,并隐藏主窗口,然后以某种方式将该控件的句柄传递给C#应用程序。


    我不确定您是否可以“添加”它,但您可以尝试以下方向:

    有必要通过IKVM将java类转换为.Net程序集。

    1. 首先,您需要获得java控件的句柄。你可以看看 this post

    2. 掌握你父母的控制权。它很简单,因为控件有其句柄属性。

    3. 在获得两个句柄后,可以将其中一个设置为另一个的父句柄。为此,需要从WINAPI调用SetParent函数。

      [DllImport(“user32.dll”)] 私有静态外部IntPtr SetParent(IntPtr hWndChild、IntPtr hwndnnewparent);

        4
  •  0
  •   trampster    17 年前

    IKVM 项目它是一个在.net中实现的Java虚拟机,允许Java和.net互操作。

    不确定它到底有多完整,是否能够实现您所需的功能,但值得一看。

        5
  •  0
  •   ShuggyCoUk    17 年前

    如果控件不是自定义控件,只是swing中的某个控件,您可以在Microsoft的Visual J#(2.0版或1.1版的补充插件)中找到它 http://msdn.microsoft.com/en-us/vjsharp/bb188695.aspx

    请注意,J#Swing控件不会直接玩WinForms应用程序中的球,您可能需要提供一个主机控件,该控件将所有绘制委托给从放置在简单J#窗体中的隐藏J#控件复制图像(也隐藏在窗体视图区域调整大小以匹配主机控件的视图区域的位置。这至少可以消除对单独进程的需要。这种用法有几个限制,我怀疑您要使用的控件很复杂(或者您只需要重新实现它)。

    请注意,J#将正式死亡(没有更严重的维护),并将在2015年正式不再支持它。 预计长期使用它会给你带来相当大的痛苦,但如果你真的需要它的一部分,这可能会有所帮助。

    推荐文章