Каков ответ Java на WPF?
Сейчас я в основном человек.Net, но в последнее время я немного поигрался с Java - исследую, что там происходит.
Сейчас я ищу Java-эквивалент для WPF. Я знаю, что могу найти библиотеку OpenGL или две, но это не так богато или просто, как система WPF.
3 ответа
Я думаю, что комбинация JavaFX, Swing, Java2D и JRE на основе браузера Java составляет решения, которые обеспечивает WPF:
- Приложения JavaFX (фактически любое приложение Java) могут запускаться в браузере или на рабочем столе.
- JavaFX обеспечивает поддержку видео высокого класса
- JavaFX предоставляет скриптовые анимации и визуальные спецэффекты
- Swing предоставляет возможности пользовательского интерфейса и может использоваться как в Java, так и в JavaFX.
- Java2D, который обеспечивает основу для всех задач рисования (включая Swing), использует преимущества аппаратного ускорения и поддержки DirectX
- JRE на рабочем столе или в браузере позволяет развертывать приложения Java в нескольких средах (включая другие экраны, такие как телеприставки или телефоны)
Я запрограммировал Aqua, Macintosh Quick Draw, Windows GDI и GDI+, Qt и.NET Winforms, и WPF - безусловно, самый сложный API, который я использовал. Хотя он обладает довольно функциональным набором функций, который лучше, чем у предыдущих технологий, таких как Swing, он не подходит для WPF. Это решает некоторые основные проблемы, которые мешают графическому программированию. Если вы выходите из мира HTML/JS, его легко освоить, но если вы выходите из мира традиционного графического программирования, это серьезный сдвиг парадигмы. Несмотря на это, это намного легче учиться, чем CSS/HTML/JS. Это чистый разрыв с устаревшими концепциями, которые мешают другим средам графического программирования.
Самая большая сила WPF в том, что он не зависит от разрешения. Он может масштабироваться на устройствах практически без изменений. Требуется немного усилий, чтобы взять экранную версию чертежа и вывести ее на принтер высокого разрешения без потери разрешения.
Он также поддерживает запуск событий. Элементы пользовательского интерфейса могут реагировать на события других элементов пользовательского интерфейса или на код вашего приложения, делая возможным динамические интерфейсы. Это позволяет легко отделить ваш код от пользовательского интерфейса так, как этого не может достичь даже HTML/JS. Элементы могут транслировать и слушать события и реагировать соответственно.
Другой сильной стороной является его высоко объектно-ориентированный и декларативно-способный API. Используя XAML, вы можете легко и быстро создать рабочий интерфейс за несколько строк. В отличие от HTML/JS, его легче изучать, а его вывод гораздо более предсказуем и эффективен. Вы даже можете полностью программировать WPF в коде, но это, как правило, не стоит незначительного увеличения производительности. Лучший способ - скомпилировать ваш Xaml в код.NET.
Кроме того, инструменты, доступные для WPF, очень обширны по сравнению с JavaFX. Существует множество инструментов, включая Expression Blend. Существует также множество инструментов для работы с векторными графическими форматами, такими как SVG и Adobe Illustrator, и их преобразования в XAML. Теперь дизайнеры и программисты могут сотрудничать в области настольных издательских систем, что раньше было очень сложно.
Таким образом, WPF настолько полон, что команда Mono решила не переносить его на базу кода Mono. Они утверждали, что на полное внедрение разумного набора функций потребуется много человеко-лет. Если бы существовала Mono-совместимая версия WPF, это сделало бы.NET де-факто кроссплатформенной платформой приложений. На самом деле, он может даже заменить HTML/CSS, так как он намного мощнее и его легче понять. К сожалению, Microsoft не видела экономическое обоснование для кросс-платформенного WPF. Вот почему SilverLight/WPF проиграл HTML5/JS. Благодаря этой ошибке они теперь вынуждены передавать не только Интернет, но и часть своего рабочего стола в HTML 5 / JS.
Функциональный WPF является более полным, чем любой из JavaFX, Swing, AWT или Java2D. В конце концов, это была цель дизайна - объединить все, что связано с презентацией, в одну библиотеку. По производительности они примерно одинаковы, за исключением использования памяти, где Java - голодная свинья