Как автор CookSwing, инструмента, который делает то, что вам нужно, я внимательно изучил эту тему, прежде чем приступить к реальной реализации. Я зарабатывал на жизнь написанием приложений Java Swing GUI.
IMO, если вы собираетесь использовать какой-либо императивный язык программирования для описания компонента Java Swing, вы можете просто использовать Java. Groovy и т. Д. Только добавляет сложностей без особых упрощений.
Декларативные языки намного лучше, потому что даже непрограммисты могут иметь смысл из этого, особенно когда вам нужно делегировать задачу точной настройки определенных макетов художникам. XML идеально подходит для декларативных языков (по сравнению с другими вариантами) благодаря простоте, удобочитаемости и множеству доступных редакторов / инструментов преобразования и т. Д.
Вот проблемы, с которыми сталкиваются в декларативном программировании GUI, а не в каком-то определенном порядке. Эти проблемы были решены в CookSwing.
- Удобочитаемость и простота. (JavaFX не проще, чем XML. Закрытие тегов XML очень помогает при чтении и не добавляет дополнительной типизации, поскольку редакторы XML обычно делают это за вас)
- расширяемость. Очень важно, потому что пользовательские компоненты Swing подойдут для любых нетривиальных проектов.
- Макеты GUI. Также очень важно. Возможность работы с BorderLayout, GridBagLayout, JGoodies FormsLayout и т. Д. Практически необходима.
- Простота копирования / вставки. При разработке макета необходимо опробовать разные. Так что нужно уметь копировать / вставлять и перемещать вещи. XML лучше, потому что иерархию компонентов и макетов легко увидеть. JavaFX несколько проблематичен из-за многострочных атрибутов и проблем с отступами. Наличие хорошего редактора является обязательным, и есть много хороших редакторов XML.
- Шаблоны (т. Е. Возможность включать другой файл макета) очень полезны для согласованного вида. Например, может потребоваться согласованный вид диалогов, панелей кнопок и т. Д.
- Взаимодействие с кодом Java. Это очень важно. Некоторые компоненты GUI могут быть созданы только с помощью кода Java (по любой причине). Таким образом, необходимо иметь возможность загружать эти объекты. Также обязательно должна быть возможность напрямую подключать слушателей и другие объекты / компоненты Java в коде XML. Использование идентификаторов для их последующего подключения НЕ будет работать хорошо, поскольку это очень утомительно.
- Интернационализация (i18n). Возможность загрузки текста / строки из пакета ресурсов, а не из жестко закодированного текста. Эта функция может иметь решающее значение для некоторых приложений.
- Локализация (l10n). Преимущество декларативного программирования (особенно с XML) заключается в том, что вы можете просто переключиться на другую форму графического интерфейса для конкретной локали и все. Если вы пишете код на Java или любом другом императивном языке, это не так просто.
- Проверка ошибок / допуск. Первоначальные проекты часто будут содержать ошибки здесь и там. Иногда ошибка может быть связана с тем, что соответствующий код Java еще не разработан. Или значок ресурса отсутствует. Работа с ошибками с императивным кодированием чрезвычайно утомительна. Таким образом, желательно иметь возможность обнаруживать ошибки, но в то же время быть устойчивыми к ошибкам, поэтому предварительный просмотр макета GUI может быть сделан как можно раньше.
- Замена компонентов графического интерфейса. То есть замените текстовое поле, в котором раньше был JTextField, на более причудливую версию компонентов. Замените значение диалога на некоторые модные диалоги пользовательского интерфейса (например, JIDE) вместо JDialog. Эта функция может сэкономить значительное количество усилий. Сам XML также полезен благодаря XSLT и другим инструментам преобразования.
- Beyond Swing. Потому что рано или поздно вы обнаружите, что многие конфигурации компонентов используют типы объектов, такие как массивы, значки, изображения, векторы и т. Д.