2

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

我知道使用 Web 控件可以实现,但我不喜欢这种方式。

4

5 回答 5

2

我写了一些例子:
- 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

于 2009-02-01T19:58:56.480 回答
2

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

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

于 2009-08-11T23:42:33.900 回答
1

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


原答案:

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

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

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

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

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

    [DllImport("user32.dll")] private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

于 2009-01-14T16:13:26.907 回答
0

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

不确定它到底有多完整,以及它是否启用了您需要的功能,但值得一看。

于 2009-01-14T00:19:19.063 回答
0

如果控件不是自定义控件并且只是在摇摆不定,您可能会发现它在 Microsoft 的 Visual J# 中可用(版本 2.0 或 1.1 的补充插件 http://msdn.microsoft.com/en-us/vjsharp/ bb188695.aspx )

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

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

于 2009-01-21T14:34:46.200 回答