SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
JavaFX 2.0 overview
Alexander Potochkin
Senior software developer
November 28, 2011
JavaFX 2.0

• Дальнейшее развитие средств Java для создания rich
  applications
  – AWT/Swing
  – JavaFX 1.X
• Целевая аудитория
  – Cуществующие и будущие Java разработчики
  – Веб разработчики




                                                       2
                                                           2
Rich Applications
• Интернет становится более насыщенным
  • Это можно только поприветствовать!
• Не только веб приложения
  • Но и обычные приложения в не меньшей степени
  • Мы хотим, чтобы JavaFX использовался везде
  • Мы не соперничаем с HTML
• Не только для конечных пользователей
  • Но и для корпоративных приложений



                                                   3
JavaFX 2.0 and Java

• Java – основной язык JavaFX 2.0
  – 100% Java API
  – Все скриптовые возможности JavaFX 1.X
    • Свойства (properties)
    • Связывание (binding)
    • Анимация (transitions, animations)
• Использование из других языков
  – JavaScript, Groovy, JRuby, Jython, Scala
  – Все языки, поддерживаемые JVM



                                               4
                                                   4
Java Ecosystem

• Миллионы Java разработчиков
  – Нет необходимости изучать новый язык
  – Простота использования и обучения
• Множество средств разработки
  –   Интегрированные среды разработки
  –   Отладчики кода
  –   Инструменты для тестирования
  –   Средства измерения производительности
  –   Средства анализа кода



                                              5
                                                  5
TIOBE Index




              6
                  6
Java Beans

• Существующий дизайн Java Beans имеет ряд
  недостатков
  –   Уведомления содержат как старое, так и новое значения
  –   Неэффективная обработка примитивных типов
  –   Большое количество вспомогательного кода
  –   Корректность обеспечивается на уровне соглашения об
      именах, а не проверяется компилятором
• Поэтому JavaFX 2.0 использует новую модель



                                                              7
                                                                  7
JavaFX Beans

• Bean
  – Получение уведомлений об изменениях свойств объекта
• Property
  – Необязательный getter
  – Необязательный setter
  – Ссылка на модель – объект, который хранит значение
• Mного вспомогательного кода
  – Но этот код тривиальный
  – Разумный компромисс между производительностью,
    количеством классов и удобством использования

                                                          8
                                                              8
Binding Example

     public class Rectangle {
         private DoubleProperty x = new DoubleProperty();
         public DoubleProperty xProperty() { return x; }
         public double getX() { return x.get(); }
         public void setX(double value) { x.set(value); }
     }


     Rectangle r1 = new Rectangle();
     r1.setX(100);


     Rectangle r2 = new Rectangle();
     r2.xProperty().bind(r1.xProperty());




                                                            9
                                                                9
Demo: Ensemble




                 10
SceneGraph

• Направленный граф без циклов
• Логический и физический уровни абстракции
• Представление элементов UI
  – Графические примитивы
  – Компоненты
  – Эффекты




                                              11
                                                   11
SceneGraph Nodes
•   ID
•   Стиль, класс стиля
•   Размеры и положение
•   Эффекты
    – Трансформации
    – Прозрачность
• Обработчики и диспетчеры событий
• Состояние
    – Курсор
    – Видимость

                                     12
                                          12
SceneGraph Performance

•   Монолитный дизайн
•   Быстрое вычисление границ узлов сцены
•   Отслеживание невалидных областей
•   Кэширование отрисованных частей сцены
•   Неявная отрисовка
    – Лучше подходит для обработки на GPU
    – Отдельный поток для отрисовки
• Приемлемый объем использованной памяти
    – Проверено на приложениях с 50К+ узлами


                                               13
                                                    13
Transforms

• Преобразования координат
  –   Сдвиг (x, y, z)
  –   Растяжение и сжатие (ширина, высота, глубина)
  –   Поворот (угол + вектор оси поворота)
  –   Произвольные аффинные преобразования (матрица 3х3)
  –   Перспективная проекция (матрица 4х4, для 3D)
• Преобразования применены к любому узлу сцены
  – Возможно кэширование некоторых значений внутри узла




                                                           14
                                                                14
Effects

• “Эффект” – применение фильтра к изображению
  –   Размытие
  –   Отражение
  –   Sepia tone
  –   Grayscale
• Ускорение с помощью D3D/OpenGL
  – В некоторых случаях использование CPU оказывается более
    эфективным




                                                          15
                                                               15
Animations

• Transitions
  – Набор простых предопределенных действий
     • Rotate, scale, translate, fade
  – Операции с узлами сцены
• KeyFrame
  – Спецификация значений свойств в нужные моменты времени
  – Или просто вызовы функции в эти моменты
• Timeline
  – Изменение значений переменных, заданных в KeyFrame
  – Может и не осуществлять непосредственно анимацию

                                                         16
                                                              16
Animation Example
     Text text = new Text();
     text.setText(“Hello World!”);


     Transition rotate =
        new RotateTransition(Duration.millis(1000), text);
     rotate.setToAngle(180);
     rotate.play();


     Timeline timeline = new Timeline();
     timeline.setCycleCount(Timeline.INDEFINITE);
     timeline.setAutoReverse(true);
     KeyValue kv = new KeyValue(rectBasicTimeline.xProperty(), 300);
     KeyFrame kf = new KeyFrame(Duration.millis(500), kv);
     timeline.getKeyFrames().add(kf);
     timeline.play();

                                                                       17
                                                                            17
Event Handling

• За основу взята модель событий DOM
• Две фазы обработки
  – Capturing




                                       Capturing




                                                            Bubbling
  – Bubbling
• Поглощение на любой стадии                       Parent



• Разные уровни обработки                           Child


  – on* свойства узлов
  – EventHandler, EventFilter
  – EventDispatcher


                                                                       18
                                                                            18
Events

• Input events
  –   Mouse
  –   Key
  –   Touch
  –   Drag&Drop
• Window events
• Focus events
• Control events



                   19
                        19
Pulse Events

• События от платформы каждые 1/60с
  – FPS может снижаться до 30, 15 и т.д в случае нагрузки
• Во время пульса
  –   Обработка анимации
  –   Раскладка узлов сцены
  –   Применение CSS ко всем требуемым узлам
  –   Синхронизация модели сцены с графическим представлением




                                                            20
                                                                 20
Graphics
• Прозрачность для приложений
  – Отрисовка SceneGraph происходит автоматически
  – Большие возможности для оптимизаций
• Prism – новый графический стек JavaFX 2.0
  – Поддержка 2D и 3D
• Аппаратное ускорение
  – Direct3D, OpenGL
  – Использование шейдеров для отрисовки примитивов
  – Программная реализация для старого оборудования
• Decora – библиотека для наложения эффектов

                                                      21
                                                           21
Controls
•   Button         •   ProgressBar
•   RadioButton    •   ProgressIndicator
•   ToggleButton   •   ScrollPane
•   CheckBox       •   SplitPane
•   ChoiceBox      •   TabPane
•   Cell           •   TitledPane
•   IndexedCell    •   ScrollBar
•   ListCell       •   Separator
•   TreeCell       •   Slider
•   Label          •   TextBox
•   MediaPlayer    •   PasswordBox
•   Menu           •   Tooltip
•   MenuBar        •   ToolBar
•   MenuButton     •   ListView
•   MenuItem       •   TableView



                                           22
                                                22
HTML
• Поддержка современных веб стандартов
  – CSS3
  – DOM
• WebEngine
  – Загрузка данных, построение DOM дерева
  – Выполнение скриптов
• WebView
  – Визуальное отображение страницы




                                             23
                                                  23
Media
• Поддержка аудио и видео
  – fxm, mp3, H.264
• МеdiaPlayer
  – Воспроизведение Media
• MediaView
  – Визуальное отображение
  – Несколько MediaView могут быть связаны с одним MediaPlayer
• MediaControl



                                                            24
                                                                 24
Deployment
• Различные модели развертывания
  – Отдельное приложение
  – Java Plugin
  – Java Web Start

• JFXPanel
  – Использование JavaFX внутри приложений Swing




                                                   25
                                                        25
Demo: SwingInterop




                     26
Время писать на JavaFX!




        http://www.oracle.com/technetwork/java/
               javafx/downloads/index.html




                                                  27
JavaFX 2.0 overview
Alexander Potochkin
Senior software developer
November 28, 2011

Más contenido relacionado

Destacado

Destacado (8)

Introduction to JavaFX 2
Introduction to JavaFX 2Introduction to JavaFX 2
Introduction to JavaFX 2
 
JavaFX in Action (devoxx'16)
JavaFX in Action (devoxx'16)JavaFX in Action (devoxx'16)
JavaFX in Action (devoxx'16)
 
Presentation - Course about JavaFX
Presentation - Course about JavaFXPresentation - Course about JavaFX
Presentation - Course about JavaFX
 
JavaFX Overview
JavaFX OverviewJavaFX Overview
JavaFX Overview
 
8 True Stories about JavaFX
8 True Stories about JavaFX8 True Stories about JavaFX
8 True Stories about JavaFX
 
Mini-curso JavaFX Aula1
Mini-curso JavaFX Aula1Mini-curso JavaFX Aula1
Mini-curso JavaFX Aula1
 
JavaFX for Java Developers
JavaFX for Java DevelopersJavaFX for Java Developers
JavaFX for Java Developers
 
Enterprising JavaFX
Enterprising JavaFXEnterprising JavaFX
Enterprising JavaFX
 

Similar a JavaFX 2.0 overview

Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Fwdays
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanovyaevents
 
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Yandex
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»e-Legion
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011CodeCamp
 
Wargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковWargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковDevGAMM Conference
 
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)Ontico
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Unity_ Handmade graphics optimizations by Roman Chehowski
Unity_ Handmade graphics optimizations by Roman ChehowskiUnity_ Handmade graphics optimizations by Roman Chehowski
Unity_ Handmade graphics optimizations by Roman ChehowskiRoman Chehowski
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаКонстантин Никифоров
 
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Ontico
 
Производительность и надежность Docsvision 5
Производительность и надежность Docsvision 5Производительность и надежность Docsvision 5
Производительность и надежность Docsvision 5Docsvision
 
Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1Eduard Antsupov
 
CodeFest 2013. Шергин Д. — Платформа 3D-графики Unigine — проект мирового уро...
CodeFest 2013. Шергин Д. — Платформа 3D-графики Unigine — проект мирового уро...CodeFest 2013. Шергин Д. — Платформа 3D-графики Unigine — проект мирового уро...
CodeFest 2013. Шергин Д. — Платформа 3D-графики Unigine — проект мирового уро...CodeFest
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012InTRUEdeR
 
"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула "Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула Fwdays
 

Similar a JavaFX 2.0 overview (20)

Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanov
 
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011
 
Wargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковWargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движков
 
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Unity_ Handmade graphics optimizations by Roman Chehowski
Unity_ Handmade graphics optimizations by Roman ChehowskiUnity_ Handmade graphics optimizations by Roman Chehowski
Unity_ Handmade graphics optimizations by Roman Chehowski
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторинга
 
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
Обзор архитектуры и подсистем деплоя и мониторинга. Как инженеры делают систе...
 
Производительность и надежность Docsvision 5
Производительность и надежность Docsvision 5Производительность и надежность Docsvision 5
Производительность и надежность Docsvision 5
 
Lift, play, akka, rails part1
Lift, play, akka, rails part1Lift, play, akka, rails part1
Lift, play, akka, rails part1
 
Крыша 2.0
Крыша 2.0Крыша 2.0
Крыша 2.0
 
CodeFest 2013. Шергин Д. — Платформа 3D-графики Unigine — проект мирового уро...
CodeFest 2013. Шергин Д. — Платформа 3D-графики Unigine — проект мирового уро...CodeFest 2013. Шергин Д. — Платформа 3D-графики Unigine — проект мирового уро...
CodeFest 2013. Шергин Д. — Платформа 3D-графики Unigine — проект мирового уро...
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
What's new in Visual Studio 2012
What's new in Visual Studio 2012What's new in Visual Studio 2012
What's new in Visual Studio 2012
 
Let's Take a Look at Akka-Java
Let's Take a Look at Akka-JavaLet's Take a Look at Akka-Java
Let's Take a Look at Akka-Java
 
"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула "Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула
 

Más de Dmitry Buzdin

How Payment Cards Really Work?
How Payment Cards Really Work?How Payment Cards Really Work?
How Payment Cards Really Work?Dmitry Buzdin
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Dmitry Buzdin
 
How to grow your own Microservice?
How to grow your own Microservice?How to grow your own Microservice?
How to grow your own Microservice?Dmitry Buzdin
 
How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?Dmitry Buzdin
 
Delivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDelivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDmitry Buzdin
 
Big Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureBig Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureDmitry Buzdin
 
Developing Useful APIs
Developing Useful APIsDeveloping Useful APIs
Developing Useful APIsDmitry Buzdin
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахDmitry Buzdin
 
Riding Redis @ask.fm
Riding Redis @ask.fmRiding Redis @ask.fm
Riding Redis @ask.fmDmitry Buzdin
 
Rubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIRubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIDmitry Buzdin
 
Rubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsRubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsDmitry Buzdin
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional ProgrammingDmitry Buzdin
 
Rubylight programming contest
Rubylight programming contestRubylight programming contest
Rubylight programming contestDmitry Buzdin
 
Continuous Delivery
Continuous Delivery Continuous Delivery
Continuous Delivery Dmitry Buzdin
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOpsDmitry Buzdin
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump AnalysisDmitry Buzdin
 

Más de Dmitry Buzdin (20)

How Payment Cards Really Work?
How Payment Cards Really Work?How Payment Cards Really Work?
How Payment Cards Really Work?
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
How to grow your own Microservice?
How to grow your own Microservice?How to grow your own Microservice?
How to grow your own Microservice?
 
How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?
 
Delivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDelivery Pipeline for Windows Machines
Delivery Pipeline for Windows Machines
 
Big Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureBig Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop Infrastructure
 
JOOQ and Flyway
JOOQ and FlywayJOOQ and Flyway
JOOQ and Flyway
 
Developing Useful APIs
Developing Useful APIsDeveloping Useful APIs
Developing Useful APIs
 
Whats New in Java 8
Whats New in Java 8Whats New in Java 8
Whats New in Java 8
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на Одноклассниках
 
Dart Workshop
Dart WorkshopDart Workshop
Dart Workshop
 
Riding Redis @ask.fm
Riding Redis @ask.fmRiding Redis @ask.fm
Riding Redis @ask.fm
 
Rubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIRubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part II
 
Rubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsRubylight Pattern-Matching Solutions
Rubylight Pattern-Matching Solutions
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
 
Rubylight programming contest
Rubylight programming contestRubylight programming contest
Rubylight programming contest
 
Continuous Delivery
Continuous Delivery Continuous Delivery
Continuous Delivery
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump Analysis
 

JavaFX 2.0 overview

  • 1. JavaFX 2.0 overview Alexander Potochkin Senior software developer November 28, 2011
  • 2. JavaFX 2.0 • Дальнейшее развитие средств Java для создания rich applications – AWT/Swing – JavaFX 1.X • Целевая аудитория – Cуществующие и будущие Java разработчики – Веб разработчики 2 2
  • 3. Rich Applications • Интернет становится более насыщенным • Это можно только поприветствовать! • Не только веб приложения • Но и обычные приложения в не меньшей степени • Мы хотим, чтобы JavaFX использовался везде • Мы не соперничаем с HTML • Не только для конечных пользователей • Но и для корпоративных приложений 3
  • 4. JavaFX 2.0 and Java • Java – основной язык JavaFX 2.0 – 100% Java API – Все скриптовые возможности JavaFX 1.X • Свойства (properties) • Связывание (binding) • Анимация (transitions, animations) • Использование из других языков – JavaScript, Groovy, JRuby, Jython, Scala – Все языки, поддерживаемые JVM 4 4
  • 5. Java Ecosystem • Миллионы Java разработчиков – Нет необходимости изучать новый язык – Простота использования и обучения • Множество средств разработки – Интегрированные среды разработки – Отладчики кода – Инструменты для тестирования – Средства измерения производительности – Средства анализа кода 5 5
  • 7. Java Beans • Существующий дизайн Java Beans имеет ряд недостатков – Уведомления содержат как старое, так и новое значения – Неэффективная обработка примитивных типов – Большое количество вспомогательного кода – Корректность обеспечивается на уровне соглашения об именах, а не проверяется компилятором • Поэтому JavaFX 2.0 использует новую модель 7 7
  • 8. JavaFX Beans • Bean – Получение уведомлений об изменениях свойств объекта • Property – Необязательный getter – Необязательный setter – Ссылка на модель – объект, который хранит значение • Mного вспомогательного кода – Но этот код тривиальный – Разумный компромисс между производительностью, количеством классов и удобством использования 8 8
  • 9. Binding Example public class Rectangle { private DoubleProperty x = new DoubleProperty(); public DoubleProperty xProperty() { return x; } public double getX() { return x.get(); } public void setX(double value) { x.set(value); } } Rectangle r1 = new Rectangle(); r1.setX(100); Rectangle r2 = new Rectangle(); r2.xProperty().bind(r1.xProperty()); 9 9
  • 11. SceneGraph • Направленный граф без циклов • Логический и физический уровни абстракции • Представление элементов UI – Графические примитивы – Компоненты – Эффекты 11 11
  • 12. SceneGraph Nodes • ID • Стиль, класс стиля • Размеры и положение • Эффекты – Трансформации – Прозрачность • Обработчики и диспетчеры событий • Состояние – Курсор – Видимость 12 12
  • 13. SceneGraph Performance • Монолитный дизайн • Быстрое вычисление границ узлов сцены • Отслеживание невалидных областей • Кэширование отрисованных частей сцены • Неявная отрисовка – Лучше подходит для обработки на GPU – Отдельный поток для отрисовки • Приемлемый объем использованной памяти – Проверено на приложениях с 50К+ узлами 13 13
  • 14. Transforms • Преобразования координат – Сдвиг (x, y, z) – Растяжение и сжатие (ширина, высота, глубина) – Поворот (угол + вектор оси поворота) – Произвольные аффинные преобразования (матрица 3х3) – Перспективная проекция (матрица 4х4, для 3D) • Преобразования применены к любому узлу сцены – Возможно кэширование некоторых значений внутри узла 14 14
  • 15. Effects • “Эффект” – применение фильтра к изображению – Размытие – Отражение – Sepia tone – Grayscale • Ускорение с помощью D3D/OpenGL – В некоторых случаях использование CPU оказывается более эфективным 15 15
  • 16. Animations • Transitions – Набор простых предопределенных действий • Rotate, scale, translate, fade – Операции с узлами сцены • KeyFrame – Спецификация значений свойств в нужные моменты времени – Или просто вызовы функции в эти моменты • Timeline – Изменение значений переменных, заданных в KeyFrame – Может и не осуществлять непосредственно анимацию 16 16
  • 17. Animation Example Text text = new Text(); text.setText(“Hello World!”); Transition rotate = new RotateTransition(Duration.millis(1000), text); rotate.setToAngle(180); rotate.play(); Timeline timeline = new Timeline(); timeline.setCycleCount(Timeline.INDEFINITE); timeline.setAutoReverse(true); KeyValue kv = new KeyValue(rectBasicTimeline.xProperty(), 300); KeyFrame kf = new KeyFrame(Duration.millis(500), kv); timeline.getKeyFrames().add(kf); timeline.play(); 17 17
  • 18. Event Handling • За основу взята модель событий DOM • Две фазы обработки – Capturing Capturing Bubbling – Bubbling • Поглощение на любой стадии Parent • Разные уровни обработки Child – on* свойства узлов – EventHandler, EventFilter – EventDispatcher 18 18
  • 19. Events • Input events – Mouse – Key – Touch – Drag&Drop • Window events • Focus events • Control events 19 19
  • 20. Pulse Events • События от платформы каждые 1/60с – FPS может снижаться до 30, 15 и т.д в случае нагрузки • Во время пульса – Обработка анимации – Раскладка узлов сцены – Применение CSS ко всем требуемым узлам – Синхронизация модели сцены с графическим представлением 20 20
  • 21. Graphics • Прозрачность для приложений – Отрисовка SceneGraph происходит автоматически – Большие возможности для оптимизаций • Prism – новый графический стек JavaFX 2.0 – Поддержка 2D и 3D • Аппаратное ускорение – Direct3D, OpenGL – Использование шейдеров для отрисовки примитивов – Программная реализация для старого оборудования • Decora – библиотека для наложения эффектов 21 21
  • 22. Controls • Button • ProgressBar • RadioButton • ProgressIndicator • ToggleButton • ScrollPane • CheckBox • SplitPane • ChoiceBox • TabPane • Cell • TitledPane • IndexedCell • ScrollBar • ListCell • Separator • TreeCell • Slider • Label • TextBox • MediaPlayer • PasswordBox • Menu • Tooltip • MenuBar • ToolBar • MenuButton • ListView • MenuItem • TableView 22 22
  • 23. HTML • Поддержка современных веб стандартов – CSS3 – DOM • WebEngine – Загрузка данных, построение DOM дерева – Выполнение скриптов • WebView – Визуальное отображение страницы 23 23
  • 24. Media • Поддержка аудио и видео – fxm, mp3, H.264 • МеdiaPlayer – Воспроизведение Media • MediaView – Визуальное отображение – Несколько MediaView могут быть связаны с одним MediaPlayer • MediaControl 24 24
  • 25. Deployment • Различные модели развертывания – Отдельное приложение – Java Plugin – Java Web Start • JFXPanel – Использование JavaFX внутри приложений Swing 25 25
  • 27. Время писать на JavaFX! http://www.oracle.com/technetwork/java/ javafx/downloads/index.html 27
  • 28. JavaFX 2.0 overview Alexander Potochkin Senior software developer November 28, 2011