Как встроить элемент управления Java в элемент управления winforms C#?

Могу ли я поместить элемент управления Java (SWT, Swing, ...) в элемент управления C#?

Я знаю, что это возможно с веб-элементами управления, но мне это не нравится.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
3 410
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ознакомьтесь с проектом ИКВМ. Это виртуальная машина Java, реализованная в .net, которая обеспечивает взаимодействие Java и .net.

Не уверен, насколько он полон и включает ли он нужную вам функциональность, но на него стоит взглянуть.

Ответ принят как подходящий

Я перепроверил это, похоже, что IKVM в настоящее время не имеет достаточной поддержки в сборке AFT. Я думаю, что единственный способ сделать то, что вам нужно, - запустить Java-элемент управления внутри отдельного процесса со скрытым главным окном и каким-то образом передать дескриптор этого элемента управления вашему приложению C#.


Оригинальный ответ:

Я не уверен, что вы можете просто «добавить» это, но вы можете попробовать это направление:

Было бы необходимо преобразовать классы java в сборки .Net через IKVM.

  1. Прежде всего вам нужно получить дескриптор управления java. Вы можете посмотреть эта почта, если вам нужна информация о том, как это сделать. Я потерпел неудачу на этом этапе, потому что я не нашел Win32DrawingSurface и DrawingSurfaces в библиотеках IKVM, может быть, достаточно просто создать некоторый статический метод getHandle () на стороне java.

  2. Получите дескриптор родительского элемента управления C#. Это просто, поскольку Control имеет свойство Handle.

  3. После получения обоих дескрипторов вы можете установить один из них как родительский для другого. Для этого вам нужно вызвать функцию SetParent из WINAPI.

    [DllImport ("user32.dll")] частный статический extern IntPtr SetParent (IntPtr hWndChild, IntPtr hWndNewParent);

Если элемент управления не является настраиваемым элементом управления, а находится в стадии разработки, вы можете найти его в Microsoft Visual J # (версия 2.0 или дополнительная надстройка для 1.1. http://msdn.microsoft.com/en-us/vjsharp/bb188695.aspx)

Обратите внимание, что элемент управления J # Swing не будет воспроизводить мяч, брошенный в приложении WinForms напрямую, вам может потребоваться предоставить элемент управления хоста, который делегирует все рисование на копирование изображения из скрытого элемента управления J #, помещенного в простую форму j # (также скрытую там, где форма размер области просмотра изменяется в соответствии с областью просмотра основного элемента управления. Это, по крайней мере, устранило бы необходимость в отдельном процессе. Это использование имеет несколько ограничений, я подозреваю, что элемент управления, который вы хотите использовать, является сложным (или вы бы просто повторно реализовали Это).

Обратите внимание, что J # официально умирает (более серьезное обслуживание не требуется) и официально не будет вообще поддерживать его в 2015 году. Ожидайте, что его использование вызовет у вас значительную боль в долгосрочной перспективе, но если вам действительно нужна какая-то его часть, это может помочь.

Я написал примеры:
- Встраивание Java-компонента в .NET GUI,
- Встраивание компонента .NET WinForm в графический интерфейс Java.
Вы можете найти их в товарах:

http://www.simtel.net/product.php[id visible95126[SiteID visiblesimtel.net
http://www.simtel.net/product.php[id visible98653[SiteID visiblesimtel.net

Для этого вы можете использовать JNBridge.

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

Другие вопросы по теме