БЕСПЛАТНЫЕ РЕСУРСЫ ДЛЯ МОДЕРНИЗАЦИИ ПРИЛОЖЕНИЙ ДЛЯ JAVA SWING

Улучшение приложения Java Swing до чистого, элегантного веб-приложения без изменения кода

Говорят, что Java Swing - это старая, устаревшая технология для разработки настольных приложений. Однако есть простые способы изменить это: добавить тестирование графического интерфейса пользователя, обновить его до современного вида и разрешить использование приложения из браузера.

Недавно я разработал небольшое приложение Java 11 для побочного проекта, и, поскольку я хотел работать как можно быстрее, я решил не изучать новую технологию / фреймворк. Как следствие, вместо того, чтобы использовать JavaFX для создания современного графического интерфейса, я остановился на Swing, который довольно старомоден и устарел.

Много раз я думал, что это плохой выбор, и испытывал соблазн снова начать с JavaFX, но в конце концов я нашел несколько уловок, которые в конечном итоге помогли мне выпустить красивое приложение. В итоге могу даже сказать, что Swing еще не умер.

Поэтому, если по какой-то причине вам необходимо поддерживать такое приложение в своей компании, следующие ресурсы могут быть полезны. В этой статье рассматриваются 3 аспекта создания лучшего приложения Swing:

  1. Протестируйте графический интерфейс.
  2. Измените внешний вид
  3. Сделайте из него веб-приложение

Функциональное тестирование Swing

Как убедиться, что ваш графический интерфейс работает нормально? Автоматические тесты для пользовательских интерфейсов могут быть довольно сложными, особенно с Swing.

AssertJ Swing приходит на помощь

К счастью, есть хороший проект под названием AssertJ Swing (форк FEST Swing), который до сих пор поддерживается.

С небольшим количеством кода вы можете создавать тесты JUnit, которые могут запускать ваше приложение или просто фрейм, и элегантно имитировать использование мыши или клавиатуры с помощью робота.

Ниже приведен пример запуска вашего приложения (основного класса), поиска основного фрейма, затем щелчка по меню Exit и проверки того, что система вышла без ошибок:

Благодаря этой библиотеке я смог добавить множество функциональных тестов в свое приложение, увеличив охват кода до более чем 90%.

Запуск тестов Swing на Travis CI

Для тестирования Swing требуется возможность запустить приложение или его часть. Во многих случаях агент, запускающий тесты, может сообщить об ошибке, утверждая, что для запуска графического интерфейса требуется дисплей.

Самым простым решением здесь является установка Xvfb (виртуальный буфер кадра X), который реализует протокол сервера отображения X11.

Когда я проводил свои тесты на Travis CI, мне пришлось адаптировать свой .travis.yml файл, добавив следующие строки, как описано в документации:

https://travis-ci.org/dist: xenial
services:
  - xvfb

Смотреть и чувствовать

Одна из самых ужасных вещей в Swing - это внешний вид по умолчанию (L&F): приложения выглядят так старомодно со старым Metal синим L&F! Лично я сразу же стараюсь перейти на Системный L&F, который тоже всегда доступен. Но у этого есть большой недостаток: приложение будет выглядеть по-разному для каждой платформы / дистрибутива, и даже больше, это зависит от настроек пользователя (цвета Windows, шрифты и т. Д.).

FlatLaf L&F

Как создать приложение Swing, не похожее на 2000-е, и с одинаковым рендерингом на всех компьютерах?

FlatLaf - это красивый современный внешний вид с открытым исходным кодом, в нескольких вариантах: Light, Dark, IntelliJ (❤️) и темы Даркула. Учитывая, что в нем нет ни градиентов, ни теней, приложение выглядит чистым и элегантным.

Его использование тривиально: просто отправьте JAR в библиотеки вашего приложения или используйте диспетчер зависимостей, такой как Maven / Gradle, чтобы добавить его как зависимость, а затем установите его как внешний вид приложения, например:

UIManager.setLookAndFeel(new FlatIntelliJLaf());

Корабельные шрифты и изображения

Еще один простой способ гарантировать приятный интерфейс - заставить приложение использовать определенный шрифт. А поскольку такой шрифт может быть установлен не на всех машинах, его довольно легко встроить и загрузить как ресурс.

В моем примере я использовал FreeSerif, чтобы убедиться, что некоторые из необходимых мне символов Unicode были правильно отображены (примечание: это устранило проблему, с которой я столкнулся в MacOS, где шрифт Apple Color Emoji заменял шрифт по умолчанию для отображения некоторых символов как цветных эмодзи).

Шрифты являются всего лишь примером, но вы также можете предоставить свои собственные изображения или значки, установленные в качестве ресурсов, чтобы ваше приложение выглядело лучше.

С рабочего стола в веб-приложение

По своей природе Swing был разработан для работы в качестве настольного приложения. Как только вы начнете использовать Swing, вы понимаете, что это никогда не будет веб-приложением. Вам нужно будет установить JRE на каждом компьютере, чтобы запустить его, и любой выпуск должен быть развернут на каждом компьютере. Разве не было бы замечательно, если бы его можно было отображать в браузере, как любое веб-приложение?

Именно для этого и разработан WebSwing: запускать любое приложение Java (включая Swing, JavaFX, апплет и NetBeans) в браузере, без единого изменения кода и с идеальным рендерингом (и для бесплатно). Он использует сервер Jetty, который загружает ваш JAR и представляет его как страницы HTML5.

Быстрый старт действительно прост: загрузите последнюю версию, извлеките файлы, запустите файл сценария и просто откройте браузер, все работает! Просто переместите свою банку в папку WebSwing (или подпапку), настройте ее как новое приложение в консоли администратора работающего сервера и все. Также предоставляется образ Docker для запуска WebSwing в контейнере, например, на PaaS, таком как OpenShift или Kubernetes. Также можно настроить HTML-страницы, получить статистику из консоли администратора или интегрировать ее с другими системами, такими как nginx, SSL-сертификаты или балансировщики нагрузки: отличная документация дает много информации для использования в производстве.

В моем примере, чтобы разместить свой побочный проект, я решил арендовать базовую виртуальную машину на Amazon Lightsail со ​​статическим IP-адресом и запустить веб-сервер nginx перед сервером Jetty WebSwing. Я также купил .com домен с сертификатом SSL, чтобы к моему приложению Java Swing можно было безопасно получить доступ из любого места, в том числе с моего мобильного телефона.

Недостатком является то, что каждый новый сеанс запускает новый экземпляр приложения, поэтому лучше настроить сервер с соответствующими настройками памяти / процессора и ограничить количество одновременных сеансов. Но коммерческая лицензия может помочь справиться с такими ограничениями.

Резюме

Хотя Java Swing - не лучший выбор для разработки графического интерфейса пользователя, его все же можно настроить, чтобы получить чистый и современный вид с помощью надежного тестирования.

Такие инструменты, как WebSwing, могут продлить жизнь «устаревших» приложений Swing (или JavaFX) в компании с небольшими изменениями и низкими затратами на обслуживание, что делает их доступными для использования из браузера.

Конечно, это не самая современная разработка, но такие быстрые достижения могут сэкономить много времени, прежде чем станет возможным полное переписывание.

Ресурсы

  • AssertJ Swing - библиотека Java, обеспечивающая свободный интерфейс для функционального тестирования пользовательского интерфейса Swing.
  • Travis-CI doc - тестирование GUI и безголовых браузеров на Travis CI
  • FlatLaf - современный кроссплатформенный интерфейс с открытым исходным кодом для настольных приложений Java Swing.
  • FreeSerif - бесплатный шрифт с лицензией GPL.
  • WebSwing - переносит Java, JavaFX, Netbeans, апплет в браузер.