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

我知道可以使用网络控件,但我不喜欢这种方式。

有帮助吗?

解决方案

我重新检查了一下,看来 IKVM 目前在其 AFT 组件中没有足够的支持。我认为满足您需要的唯一方法是在带有隐藏主窗口的单独进程中运行 java 控件,并以某种方式将该控件的句柄传递给您的 C# 应用程序。


原答案:

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

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

  1. 首先你需要获得java控件的句柄。你可以看看 这个帖子 如果您需要有关如何执行此操作的信息。我在这一步失败了,因为我在 IKVM 的库中没有找到 Win32DrawingSurface 和 DrawingSurfaces,也许在 java 端创建一些静态 getHandle() 方法就足够了。

  2. 获取父 C# 控件的句柄。这很简单,因为 Control 有它的 Handle 属性。

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

    dllimport(“ user32.dll”)]私有静态extern intptr setparent(intptr hwndchild,intptr hwndnewparent);

其他提示

我写的例子: 点击 - Java组件在.NET GUI嵌入, 点击 - .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

您可以使用JNBridge的做到这一点。

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

查看 IKVM 项目。其在.NET中实现的Java虚拟机,它允许Java和.NET互操作性。

不知道究竟是如何完成它,如果它让你需要的功能的击打它值得一看。

如果该控件不是一个自定义的控制,是刚刚东西摆动,你可能会发现它在微软的Visual J#可(无论是版本2.0或补充添加为1.1 http://msdn.microsoft.com/en-us/vjsharp/bb188695。 ASPX

请注意,一个J#摆动控制不会起球的WinForms应用程序直接下降,您可能需要提供一台主机控制,代表所有的绘画复制从放置一个简单的J#表单中的一个隐藏的J#控制图像(也隐藏在窗体的视图区域大小相匹配的主机控制的观看区域,这至少会消除对单独的进程的需要。这种用法有诸多限制,我怀疑你要使用的控制是复杂的(不然你就只是还重新实现它)。

请注意J#正式死亡(没有更严重的维护)和将正式刻意去支持它在2015年在所有。 希望用它来使你在长期的相当大的痛苦,但如果你真的需要它的某些部分,这可能帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top