javafx 2.0 overview
DESCRIPTION
TRANSCRIPT
JavaFX 2.0 overviewAlexander Potochkin
Senior software developer
November 28, 2011
2
JavaFX 2.0
• Дальнейшее развитие средств Java для создания rich applications– AWT/Swing– JavaFX 1.X
• Целевая аудитория– Cуществующие и будущие Java разработчики– Веб разработчики
2
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
5
Java Ecosystem
• Миллионы Java разработчиков– Нет необходимости изучать новый язык– Простота использования и обучения
• Множество средств разработки– Интегрированные среды разработки– Отладчики кода– Инструменты для тестирования– Средства измерения производительности– Средства анализа кода
5
6
TIOBE Index
6
7
Java Beans
• Существующий дизайн Java Beans имеет ряд недостатков– Уведомления содержат как старое, так и новое значения– Неэффективная обработка примитивных типов– Большое количество вспомогательного кода– Корректность обеспечивается на уровне соглашения об
именах, а не проверяется компилятором• Поэтому JavaFX 2.0 использует новую модель
7
8
JavaFX Beans
• Bean– Получение уведомлений об изменениях свойств объекта
• Property– Необязательный getter– Необязательный setter– Ссылка на модель – объект, который хранит значение
• Mного вспомогательного кода– Но этот код тривиальный– Разумный компромисс между производительностью,
количеством классов и удобством использования
8
9
Binding Example
9
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());
10
Demo: Ensemble
11
SceneGraph
• Направленный граф без циклов• Логический и физический уровни абстракции• Представление элементов UI
– Графические примитивы– Компоненты– Эффекты
11
12
SceneGraph Nodes
• ID• Стиль, класс стиля• Размеры и положение• Эффекты
– Трансформации– Прозрачность
• Обработчики и диспетчеры событий• Состояние
– Курсор– Видимость
12
13
SceneGraph Performance
• Монолитный дизайн• Быстрое вычисление границ узлов сцены• Отслеживание невалидных областей• Кэширование отрисованных частей сцены• Неявная отрисовка
– Лучше подходит для обработки на GPU– Отдельный поток для отрисовки
• Приемлемый объем использованной памяти– Проверено на приложениях с 50К+ узлами
13
14
Transforms
• Преобразования координат– Сдвиг (x, y, z)– Растяжение и сжатие (ширина, высота, глубина)– Поворот (угол + вектор оси поворота)– Произвольные аффинные преобразования (матрица 3х3)– Перспективная проекция (матрица 4х4, для 3D)
• Преобразования применены к любому узлу сцены– Возможно кэширование некоторых значений внутри узла
14
15
Effects
• “Эффект” – применение фильтра к изображению– Размытие– Отражение– Sepia tone– Grayscale
• Ускорение с помощью D3D/OpenGL– В некоторых случаях использование CPU оказывается более
эфективным
15
16
Animations
• Transitions– Набор простых предопределенных действий
• Rotate, scale, translate, fade– Операции с узлами сцены
• KeyFrame– Спецификация значений свойств в нужные моменты времени– Или просто вызовы функции в эти моменты
• Timeline– Изменение значений переменных, заданных в KeyFrame– Может и не осуществлять непосредственно анимацию
16
17
Animation Example
17
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();
18
Event Handling
• За основу взята модель событий DOM• Две фазы обработки
– Capturing– Bubbling
• Поглощение на любой стадии• Разные уровни обработки
– on* свойства узлов– EventHandler, EventFilter– EventDispatcher
18
Parent
Child
Capturing
Bub
blin
g
19
Events
• Input events– Mouse– Key– Touch– Drag&Drop
• Window events• Focus events• Control events
19
20
Pulse Events
• События от платформы каждые 1/60с– FPS может снижаться до 30, 15 и т.д в случае нагрузки
• Во время пульса– Обработка анимации– Раскладка узлов сцены– Применение CSS ко всем требуемым узлам– Синхронизация модели сцены с графическим представлением
20
21
Graphics
• Прозрачность для приложений– Отрисовка SceneGraph происходит автоматически– Большие возможности для оптимизаций
• Prism – новый графический стек JavaFX 2.0– Поддержка 2D и 3D
• Аппаратное ускорение– Direct3D, OpenGL– Использование шейдеров для отрисовки примитивов– Программная реализация для старого оборудования
• Decora – библиотека для наложения эффектов
21
22
Controls• Button• RadioButton• ToggleButton• CheckBox• ChoiceBox• Cell• IndexedCell• ListCell• TreeCell• Label• MediaPlayer• Menu• MenuBar• MenuButton• MenuItem
22
• ProgressBar• ProgressIndicator• ScrollPane• SplitPane• TabPane• TitledPane• ScrollBar• Separator• Slider• TextBox• PasswordBox• Tooltip• ToolBar• ListView• TableView
23
HTML
• Поддержка современных веб стандартов– CSS3– DOM
• WebEngine– Загрузка данных, построение DOM дерева– Выполнение скриптов
• WebView– Визуальное отображение страницы
23
24
Media
• Поддержка аудио и видео– fxm, mp3, H.264
• МеdiaPlayer– Воспроизведение Media
• MediaView– Визуальное отображение– Несколько MediaView могут быть связаны с одним MediaPlayer
• MediaControl
24
25
Deployment
• Различные модели развертывания– Отдельное приложение– Java Plugin– Java Web Start
• JFXPanel– Использование JavaFX внутри приложений Swing
25
26
Demo: SwingInterop
27
http://www.oracle.com/technetwork/java/javafx/downloads/index.html
Время писать на JavaFX!
JavaFX 2.0 overviewAlexander Potochkin
Senior software developer
November 28, 2011