Как JavaFX сравнивается с WPF? [закрытый]



Я в основном программист C#, я перестал писать Java около 10 лет назад, но я стараюсь идти в ногу с технологией на Java, читая статьи, разговаривая с друзьями и т. д.



Я слышал о новой богатой структуре GUI под названием JavaFX, но не смог найти никакого ресурса, сравнивающего его с параллелями, отличными от Java.



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



изменить: видя как нет ответов, я постараюсь быть более конкретным:




  1. WPF использует XAML для создания визуального дерева, есть ли у JavaFX что-то подобное?

  2. WPF лучше всего использовать с привязкой к модели представления в шаблоне MVVM, JavaFX также широко использует привязку?

  3. WPF использует GPU для рендеринга, делает ли JavaFX то же самое?

  4. как Silverlight сравнивается с JavaFX при запуске через браузер на сетевом ПК?


... Больше, чтобы прибыть...



Я меняю это на вики сообщества, чтобы сравнения могли постоянно обновляться (надеюсь).

959   2  

2 ответов:

Я изучал JavaFX в течение последних нескольких недель. Вот высокоуровневый обзор того, как он сравнивается с WPF в моих глазах:

все мои комментарии связаны с JavaFX 2.0. Эта информация, вероятно, будет изменена, поскольку платформа все еще довольно незрелая и активно развивается.

графика

как и WPF, JavaFX использует сохраненную систему визуализации графики. Пользовательский интерфейс содержит график сцены, который состоит из "узлов", которые можно рассматривать как концептуально похожие на WPF UIElement.

JavaFX разгружает графический рендеринг на GPU, если он доступен. Графическая система использует DirectX на Windows и OpenGL на других платформах.

разметки

пользовательские интерфейсы JavaFX могут быть созданы как в коде, так и с помощью разметки FXML, которая похожа на XAML в том, что граф объектов может быть создан с помощью вложенных элементов.

FXML имеет некоторые аналогичные функции XAML, такие как привязка свойств (только простые выражения) и привязка к обработчикам событий (любой onEvent метод). Обработчики событий могут быть объявлены в строке, но обычно вы привязываетесь к событию в связанном контроллере.

файлы FXML могут иметь связанный контроллер, который позволяет объявлять сложные обработчики событий и настраивать привязки между свойствами. Это контроллер в смысле MVC и не то же самое, что viewModel в WPF world (обычно контроллер будет иметь ссылки на узлы и элементы управления).

одно отличие от WPF заключается в том, что кажется, что FXML не компилируется в промежуточное двоичное представление, такое как BAML. Я еще не заметил никаких проблем с производительностью, но не используется активно система. Однако я заметил, что FXML обычно имеет тенденцию быть короче любого XAML, поскольку платформа по-прежнему призывает вас писать код, а стили объявляются отдельно.

введение в FXML можно найти здесь.

конструктор сцен предоставляется бесплатно (как в пиве), поэтому, если вам не нравится ручное кодирование пользовательского интерфейса, вы можете перетаскивать элементы, устанавливать свойства и привязывать к коду в своем контроллере, и FXML будет сгенерирован автоматически. Очевидно, что конструктор сцен далеко не так силен, как Expression Blend, но он все же лучше, чем "дизайнер", предоставляемый Visual Студия.

обязательные

JavaFX имеет очень мощное свойство и систему привязки. Шаблон Java Bean был расширен для включения классов, которые инкапсулируют свойство (аналогично тому, как свойства зависимостей WPF представляют свойства). Эти классы реализуют интерфейсы, которые обеспечивают недействительность и уведомление об изменениях.

существует различие между уведомлениями о недействительности и уведомлениями об изменениях. Инвалиды просто сказать вам что выражение привязки теперь недействительно и должно быть пересчитано; пересчет фактически не происходит, пока вы не запросите значение свойства через его get() или getValue() методы. Однако если вы зарегистрировали прослушиватель изменений, то выражение будет немедленно повторно оценено, и все, что связано с этим свойством, будет отражать изменения.

JavaFX предоставляет эти свойства аналогично WPF со свойством get и set и методом, который возвращает экземпляр оболочки свойств (которые не являются статическими, как свойства WPF).

сложные Привязки могут быть созданы между несколько свойства. Хотите, чтобы целочисленное свойство было суммой двух других (a = b + c)? Нет проблем, JavaFX предоставляет свободный API для выражения такого рода отношений, например

A. Add (B, C);

если значение B или C изменяется, то соответствующие уведомления будут подняты так, что система знает, что должна быть пересмотрена. Обратите внимание, что в этом случае исключение будет выдано, если вы попытаетесь установить значение A, поскольку оно привязано к другим свойствам, поэтому оно не имеет смысла в этом контексте.

эти выражения могут быть довольно сложными, например a = (b + c) * (d - e) и могут включать любое количество свойств. Fluent API довольно прост в чтении и использовании, но не так хорош, как некоторые из Fluent API, предоставляемые некоторыми библиотеками Microsoft, но это больше относится к Java языковые ограничения, а не сам JavaFX.

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

JavaFX также предоставляет низкоуровневый API для настройки Привязок самостоятельно, если вы хотите создать пользовательское выражение привязки, которое не предоставляется API, или если вы обеспокоены производительностью.

одно из самых больших различий между JavaFX и WPF - это то, что привязки в основном выполняются в коде в JavaFX против способа WPF установления Привязок в разметке.

введение в свойства и привязки можно найти здесь.

стили

JavaFX использует CSS для изменения внешнего вида узлов, содержащихся в графике сцены. Существует полная спецификация, которая объясняет типы и свойства, которые могут быть установлены на каждом узле тип.

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

.button {
    my-custom-color: RGB(234, 44, 78);
}

.my-control {
    -fx-background-color: my-custom-color
}

он также предоставляет несколько функций, которые позволяют получать цвета из других ранее определенных цветов, что полезно для создания таких вещей, как градиенты. Это означает, что базовая палитра цветов может быть определена, а остальные могут быть сгенерированы из этих значений (это то, что файл CSS JavaFX по умолчанию делает.)

JavaFX CSS не позволяет вам определить тип макета, используемого узлом (на момент написания этого все макеты должны быть выполнены в коде). Это работает очень хорошо для меня, так как это был один из аспектов CSS, который действительно вызвал у меня боль при использовании его с HTML.

лично я предпочитаю CSS стилям XAML, которые, как правило, слишком многословны по моему вкусу.

руководство по JavaFX CSS можно найти здесь.

планировка

JavaFX предоставляет ряд панелей макета, которые похожи на те, которые предоставляются WPF. Одно отличие, которое я заметил, заключается в том, что контракт измерения и компоновки определяется дальше по цепочке наследования в Region класса.

как уже упоминалось ранее, макет не может быть выполнен с помощью CSS, но может быть выражен с помощью кода, FXML или создан с помощью Scene builder (который в конечном итоге преобразуется в FXML).

управления

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

элементы управления действительно предоставляют некоторые из конкретных областей реализации CSS, позволяя определенные области a контроль, который будет нацелен на ваши стили. Это известно как конструкции контроля. Е. Г. А CheckBox предоставляет две подструктуры; поле и флажок позволяют каждой части элемента управления быть стилизованы независимо. Обратите внимание, что как описано ранее только посмотреть элемента управления можно изменить с помощью CSS, но чувствовать не может. Например, вы не можете резко изменить способ a TabPane выкладывает свое содержание, изменяя его внутреннюю панель макета в как вы можете с WPF TabControl.

хотя это звучит довольно ограничительно, предпочтительный способ создания пользовательских элементов управления в JavaFX, по-видимому, использует композицию вдоль линий, полученных из панели макета, чтобы позиционировать стандартные элементы управления и повторно стилизовать их с помощью CSS.

вывод

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

Я бы рекомендовал дать JavaFX попробовать. Читайте документация и пытался собрать небольшое приложение и посмотреть, что вы думаете.

вы также должны проверить FXExperience.com который регулярно обновляется с информацией от команды разработчиков.

Я думаю, что лучший способ почувствовать JavaFX - это просто попробовать его. Есть некоторые хорошие учебники на веб-сайте JavaFX. Вот парочка:

Они довольно быстро и дать вам хорошее чувство для языка. Есть много других, на JavaFX сайт, если вы заинтересованы в более учебники и статьи.

для конкретные ответы на ваши вопросы:

  1. JavaFX имеет свой собственный декларативный язык для создания "визуального дерева", которое не является производной xml. Пользовательский интерфейс основан на графике сцены, поэтому вы можете применять различные эффекты и анимацию к любому узлу графика. См. учебники для получения дополнительной информации. Существует также дизайнерский инструмент для JavaFX (который я еще не пробовал).
  2. JavaFX имеет привязку, встроенную в язык.
  3. JavaFX на рабочий стол использует Java AWT / Swing, который использует рендеринг GPU. Каждая версия Java, похоже, разгружает больше своей графики на GPU. Крис Кэмпбелл из Sun написал в блоге о ускорение GPU. Я не уверен, что мобильная версия JavaFX имеет ускорение GPU. Я обнаружил, что более ранние версии JavaFX не были достаточно эффективны для того, что мне нужно, но я знаю, что последняя версия имеет значительные улучшения производительности по сравнению с предыдущими версиями, и они все еще работают что делает его быстрее.
  4. JavaFx использует Java-апплеты для запуска в браузере. Начиная с Java 6 update 10, платформа Java applet была переработана, и хотя она не такая бесшовная, как Adobe flash, она значительно улучшена. Я не уверен, как это сравнивается с Silverlight, кроме того, что у меня были проблемы с получением Silverlight для работы на Linux, но я получил JavaFX, работающий на Linux.

вот еще один связанный с этим вопрос.

Comments

    Ничего не найдено.