Предисловие 15
Глава 1. Первые шаги
19
1.1. Установка OpenJDK 19
1.2. Установка библиотеки JavaFX 20
1.3. Создание и запуск JavaFX-приложения из командной строки 24
1.4. Установка и настройка редактора Eclipse 27
1.5. Установка модуля e(fx)clipse 34
1.6. Установка программы Scene Builder 36
1.7. Создание JavaFX-приложения в Eclipse. Способ 1 38
1.8. Создание JavaFX-приложения в Eclipse. Способ 2 49
1.9. Указание идентификаторов компонентов 56
1.10. Доступ к главному окну приложения внутри класса контроллера 58
1.11. Метод initialize() и интерфейс Initializable 62
1.12. Методы init() и stop() 64
1.13. Получение параметров из командной строки 66
1.14. Завершение работы JavaFX-приложения 68
1.15. Выполнение длительных операций 69
Глава 2. Управление окном приложения
71
2.1. Создание и отображение окна 71
2.2. Указание стиля окна 75
2.3. Изменение и получение размеров окна 77
2.4. Местоположение окна на экране 79
2.4.1. Класс Screen: размеры экрана 80
2.5. Разворачивание и сворачивание окна 81
2.6. Управление фокусом ввода и положением окна по оси Z 83
2.7. Управление прозрачностью окна 84
2.8. Модальные окна 85
2.9. Смена значка в заголовке окна 87
2.10. Изменение цвета фона 88
2.11. Использование изображения в качестве фона 89
2.12. Создание окна произвольной формы 90
2.13. Закрытие окна из программы 91
Глава 3. Размещение компонентов в окне
93
3.1. Класс Scene 93
3.1.1. Создание объекта 93
3.1.2. Размеры сцены 95
3.1.3. Местоположение сцены 95
3.1.4. Фон сцены 96
3.2. Размеры контейнеров и компонентов 97
3.3. Внутренние отступы 100
3.3.1. Класс Insets 100
3.4. Местоположение узлов внутри контейнера 102
3.5. Фон контейнеров и компонентов 105
3.5.1. Класс Background 105
3.5.2. Класс BackgroundFill: заливка сплошным цветом, градиентом или текстурой 107
3.5.3. Класс CornerRadii: радиус скругления углов 108
3.5.4. Класс BackgroundImage: фоновое изображение 109
3.6. Рамка 111
3.7. Изменение прозрачности узла 113
3.8. Управление видимостью узла 114
3.9. Управление доступностью узла 115
3.10. Абсолютное позиционирование 116
3.10.1. Класс Group 116
3.10.2. Класс Pane 118
3.11. Горизонтальное и вертикальное выравнивание 119
3.11.1. Класс HBox: выравнивание по горизонтали 119
3.11.2. Класс VBox: выравнивание по вертикали 122
3.12. Класс GridPane: размещение узлов внутри ячеек таблицы 125
3.12.1. Класс ColumnConstraints: описание столбцов 127
3.12.2. Класс RowConstraints: описание строк 129
3.12.3. Добавление узла в ячейку таблицы 131
3.12.4. Объединение нескольких ячеек 134
3.12.5. Изменение свойств ячейки 135
3.12.6. Изменение свойств таблицы 136
3.13. Класс FlowPane 138
3.14. Класс BorderPane 140
3.15. Класс StackPane 143
3.16. Класс TilePane 144
3.17. Класс AnchorPane: привязка узла к сторонам панели 147
3.18. Класс TabPane: панель с вкладками 150
3.18.1. Класс Tab: вкладка 151
3.18.2. Свойства класса TabPane 153
3.19. Класс TitledPane: панель с заголовком 154
3.20. Класс Accordion: панель «аккордеон» 156
3.21. Класс SplitPane: панель с изменяемыми размерами областей 157
Глава 4. Обработка событий
161
4.1. Назначение обработчиков событий 161
4.2. Блокировка и удаление обработчика 165
4.3. Последовательность вызова обработчиков 166
4.4. Генерация события из программы 167
4.5. Класс Event 168
4.6. Использование таймеров 170
4.6.1. Класс Timer 171
4.6.2. Класс TimerTask 172
4.6.3. Изменение свойств узлов из разных потоков 172
4.7. События окна 174
4.7.1. Отображение, сокрытие и закрытие окна 174
4.7.2. Изменение положения окна и его размеров 177
4.7.3. Разворачивание и сворачивание окна 178
4.8. События клавиатуры 178
4.8.1. Типы событий 179
4.8.2. Получение информации о событии 180
4.8.3. Коды клавиш 181
4.8.4. Управление фокусом ввода 183
4.8.5. Назначение клавиш быстрого доступа 185
4.9. События мыши 187
4.9.1. Типы событий 188
4.9.2. Получение информации о событии 192
4.9.3. Прокрутка колесика мыши 194
4.9.4. Изменение внешнего вида указателя мыши 196
4.10. Работа с буфером обмена 197
4.10.1. Класс Clipboard 197
4.10.2. Класс ClipboardContent 199
4.11. Технология drag & drop 202
4.11.1. Типы событий 202
4.11.2. Запуск перетаскивания 205
4.11.3. Обработка сброса 206
4.11.4. Получение информации о событии 207
4.11.5. Класс Dragboard 208
4.11.6. Класс MouseDragEvent 209
4.12. Класс Robot: генерация событий мыши и клавиатуры 211
Глава 5. 2D-графика
215
5.1. Указание координат и размеров 215
5.1.1. Класс Point2D: координаты точки 215
5.1.2. Класс Dimension2D: размеры прямоугольной области 219
5.1.3. Класс Rectangle2D: координаты и размеры прямоугольной области 219
5.1.4. Классы Bounds и BoundingBox 221
5.2. Класс Paint 225
5.3. Класс Color: цвет 226
5.4. Класс LinearGradient: линейный градиент 230
5.5. Класс RadialGradient: радиальный градиент 233
5.6. Режимы наложения 236
5.7. Маски слоя 238
5.8. Класс Shape 238
5.8.1. Изменение характеристик фона фигуры 239
5.8.2. Изменение характеристик обводки 240
5.8.3. Управление режимом сглаживания 243
5.9. Класс Line: прямая линия 244
5.10. Класс Arc: дуга или сектор 245
5.11. Класс Polyline: ломаная линия 248
5.12. Класс CubicCurve: кубическая кривая Безье 249
5.13. Класс QuadCurve: квадратичная кривая 251
5.14. Класс Rectangle: прямоугольник 252
5.15. Класс Ellipse: эллипс 254
5.16. Класс Circle: круг 255
5.17. Класс Polygon: многоугольник 257
5.18. Класс Text: текст 258
5.18.1. Создание объекта 258
5.18.2. Подчеркивание и зачеркивание текста 260
5.18.3. Класс Font: изменение характеристик шрифта 261
5.18.4. Выравнивание текста 264
5.18.5. Выделение фрагмента текста 265
5.18.6. Управление положением текстового курсора 266
5.18.7. Класс HitInfo 267
5.18.8. Класс TextFlow 267
5.19. Класс Path: траектория 269
5.19.1. Класс PathElement 271
5.19.2. Классы MoveTo и ClosePath 272
5.19.3. Класс HLineTo: горизонтальная линия 273
5.19.4. Класс VLineTo: вертикальная линия 273
5.19.5. Класс LineTo: линия 274
5.19.6. Класс ArcTo: дуга 275
5.19.7. Класс CubicCurveTo: кубическая кривая Безье 276
5.19.8. Класс QuadCurveTo: квадратичная кривая 277
5.20. Класс SVGPath 278
Глава 6. Работа с изображениями
283
6.1. Класс Image: загрузка изображения из файла 283
6.2. Класс ImageView: отображение изображения в окне 286
6.3. Интерфейс PixelReader: получение цвета пикселов 288
6.4. Класс WritableImage: создание нового изображения 290
6.5. Интерфейс PixelWriter: изменение цвета пикселов 292
6.6. Класс SwingFXUtils 294
6.7. Класс ImagePattern 296
6.8. Создание снимков сцены, узла и экрана 297
Глава 7. Canvas API
301
7.1. Класс Canvas 301
7.2. Класс GraphicsContext 302
7.2.1. Изменение характеристик заливки 303
7.2.2. Изменение характеристик обводки 304
7.2.3. Изменение цвета отдельных пикселов 306
7.2.4. Рисование линий 307
7.2.5. Рисование траектории 308
7.2.6. Рисование фигур 311
7.2.7. Вывод текста 313
7.2.8. Вывод изображения 315
7.2.9. Очистка прямоугольной области или всего холста 316
7.2.10. Сохранение и восстановление состояния 317
7.2.11. Применение эффектов и трансформаций 317
Глава 8. Трансформации и эффекты
321
8.1. Трансформации 321
8.1.1. Методы класса Node 321
8.1.2. Классы Transform и Affine 323
8.1.3. Класс Translate: смещение 326
8.1.4. Класс Scale: масштабирование 328
8.1.5. Класс Rotate: вращение 329
8.1.6. Класс Shear: сдвиг 331
8.2. Эффекты 333
8.2.1. Методы класса Node 333
8.2.2. Класс DropShadow: внешняя тень 333
8.2.3. Класс InnerShadow: внутренняя тень 335
8.2.4. Класс Shadow: тень 337
8.2.5. Класс Reflection: зеркальное отражение 338
8.2.6. Класс GaussianBlur: размытие по Гауссу 339
8.2.7. Класс MotionBlur: размытие в движении 340
8.2.8. Класс BoxBlur: размытие 341
8.2.9. Класс Bloom: свечение 342
8.2.10. Класс Glow: свечение 343
8.2.11. Класс PerspectiveTransform: трансформация перспективы 344
8.2.12. Класс ColorAdjust: изменение цветового тона, насыщенности, яркости и контраста 346
8.2.13. Класс SepiaTone: эффект состаривания изображения 347
8.2.14. Класс Lighting: эффект освещения источником света 348
8.2.15. Класс Light: источник освещения 349
8.2.16. Класс Blend: смешивание 352
8.2.17. Класс ColorInput 354
8.2.18. Класс ImageInput 355
8.2.19. Класс DisplacementMap: искажение 356
Глава 9. Создание анимации
359
9.1. Класс Duration: продолжительность выполнения анимации 359
9.2. Класс Animation 362
9.2.1. Настройка параметров 362
9.2.2. Использование меток 364
9.2.3. Запуск и остановка анимации 365
9.3. Классы Transition и Interpolator 366
9.4. Класс FadeTransition: изменение прозрачности 368
9.5. Класс TranslateTransition: изменение местоположения 369
9.6. Класс PathTransition: движение вдоль траектории 372
9.7. Класс ScaleTransition: изменение масштаба 373
9.8. Класс RotateTransition: вращение 375
9.9. Класс FillTransition: изменение цвета заливки 377
9.10. Класс StrokeTransition: изменение цвета обводки 378
9.11. Класс ParallelTransition: параллельное выполнение нескольких анимаций 380
9.12. Класс SequentialTransition: последовательное выполнение нескольких анимаций 381
9.13. Класс PauseTransition: пауза во время выполнения анимации 382
9.14. Класс Timeline: шкала времени 383
9.14.1. Класс KeyFrame 384
9.14.2. Класс KeyValue 386
9.15. Класс AnimationTimer 387
Глава 10. 3D-графика
389
10.1. Класс Point3D 389
10.2. Класс Shape3D 393
10.3. Класс Box: куб 394
10.4. Класс Cylinder: цилиндр 396
10.5. Класс Sphere: сфера 397
10.6. Класс MeshView: 3D-фигура произвольной формы 398
10.7. Класс SubScene: субсцена 401
10.8. Управление камерой 403
10.9. Управление источником света 405
Глава 11. Основные компоненты
409
11.1. Поиск узла 409
11.2. Использование JavaFX-свойств 414
11.2.1. Создание JavaFX-свойства 415
11.2.2. JavaFX-свойства только для чтения 416
11.2.3. Назначение и удаление обработчиков 417
Интерфейсы InvalidationListener и Observable 417
Интерфейсы ChangeListener и ObservableValue 418
11.2.4. Двунаправленное связывание 419
11.2.5. Однонаправленное связывание 421
11.2.6. Выражения 422
11.3. Классы Labeled и Label 426
11.4. Класс ButtonBase 433
11.5. Класс Hyperlink: гиперссылка 434
11.6. Класс Button: командная кнопка 435
11.7. Класс ButtonBar 437
11.8. Переключатели 440
11.8.1. Класс ToggleButton и интерфейс Toggle 440
11.8.2. Класс RadioButton 441
11.8.3. Класс ToggleGroup: объединение переключателей в группу 442
11.9. Класс CheckBox: флажок 444
11.10. Класс Slider: шкала с ползунком 446
11.11. Индикаторы хода процесса 449
11.11.1. Класс ProgressIndicator 449
11.11.2. Класс ProgressBar 451
11.11.3. Класс Task: задача для выполнения в отдельном потоке 451
11.11.4. Интерфейс Worker 456
11.11.5. Обработка событий выполнения задачи 457
11.11.6. Класс Service 460
11.12. Класс ScrollBar: полоса прокрутки 462
11.13. Класс ScrollPane: область с полосами прокрутки 465
11.14. Класс ToolBar: панель инструментов 468
11.15. Класс Separator: разделительная линия 470
Глава 12. Работа с текстом и Интернетом
473
12.1. Класс Spinner 473
12.2. Класс TextInputControl 478
12.2.1. Основные свойства и методы 479
12.2.2. Управление позицией текстового курсора 480
12.2.3. Класс IndexRange: работа с диапазоном 481
12.2.4. Работа с выделением 483
12.2.5. Копирование и вставка текста 485
12.2.6. Отмена и повтор ввода 485
12.2.7. Класс TextFormatter 486
12.3. Класс TextField: однострочное текстовое поле 489
12.4. Класс PasswordField: поле для ввода пароля 491
12.5. Класс TextArea: многострочное текстовое поле 491
12.6. Класс HTMLEditor: текстовый редактор 493
12.7. Класс WebView: Web-браузер 495
12.8. Класс WebEngine 497
12.8.1. Загрузка Web-страницы 498
12.8.2. Получение информации о Web-странице 500
12.8.3. Взаимодействие с JavaScript 501
12.8.4. Получение информации о просмотренных страницах 508
Глава 13. Списки
511
13.1. Интерфейс ObservableList 511
13.1.1. Создание списка 512
13.1.2. Методы из интерфейса ObservableList 514
13.1.3. Назначение и удаление обработчиков. Интерфейс ListChangeListener 516
13.1.4. Методы из класса FXCollections 520
13.2. Класс ChoiceBox: раскрывающийся список 522
13.3. Класс SingleSelectionModel: выбор одного элемента 525
13.4. Класс ComboBoxBase 527
13.5. Класс ComboBox: раскрывающийся список 530
13.6. Класс ColorPicker: выбор цвета 535
13.7. Класс DatePicker: выбор даты 537
13.8. Класс ListView: список 540
13.8.1. Создание объекта 540
13.8.2. Основные свойства и методы 542
13.8.3. Класс FocusModel: управление фокусом ввода 545
13.8.4. Редактирование элементов 546
13.9. Класс MultipleSelectionModel: выбор нескольких элементов 549
Глава 14. Таблицы и иерархические списки
553
14.1. Класс TableView: таблица 553
14.1.1. Создание таблицы 553
14.1.2. Класс TableColumn: создание столбцов 555
14.1.3. Объединение столбцов в группу 559
14.1.4. Управление размерами столбцов 560
14.1.5. Изменение видимости столбца 562
14.1.6. Управление прокруткой 563
и отдельных ячеек 565
14.1.8. Класс TableViewFocusModel: управление фокусом ввода 568
14.1.9. Изменение свойств ячеек столбца 570
14.1.10. Изменение свойств ячеек строки 571
14.1.11. Сортировка элементов 572
14.1.12. Редактирование элементов 574
14.1.13. Изменение порядка следования столбцов 579
14.2. Класс TreeView: иерархический список 579
14.2.1. Создание иерархического списка 580
14.2.2. Класс TreeItem: элемент иерархического списка 581
14.2.3. Обработка событий 584
14.2.4. Управление прокруткой 587
14.2.5. Управление выбором элементов 588
14.2.6. Управление фокусом ввода 589
14.2.7. Редактирование элементов 590
14.2.8. Класс CheckBoxTreeItem: флажок в качестве элемента списка 592
14.3. Класс TreeTableView: иерархический список со столбцами 595
14.3.1. Создание списка и добавление элементов 595
14.3.2. Класс TreeTableColumn: создание столбцов 599
14.3.3. Объединение столбцов в группу 602
14.3.4. Управление размерами столбцов 603
14.3.5. Изменение видимости столбца 605
14.3.6. Управление прокруткой 606
14.3.7. Класс TreeTableViewSelectionModel: управление выбором строк и отдельных ячеек 607
14.3.8. Класс TreeTableViewFocusModel: управление фокусом ввода 611
14.3.9. Изменение свойств ячеек столбца 613
14.3.10. Изменение свойств ячеек строки 614
14.3.11. Сортировка элементов 615
14.3.12. Редактирование элементов 617
14.3.13. Изменение порядка следования столбцов 621
Глава 15. Меню и всплывающие окна
623
15.1. Класс MenuBar: панель меню 624
15.2. Класс Menu: отдельное или вложенное меню 625
15.3. Пункты меню 628
15.3.1. Класс MenuItem: пункт меню 628
15.3.2. Обработка выбора пункта меню 630
15.3.3. Назначение клавиш быстрого доступа 632
15.3.4. Класс CheckMenuItem: пункт меню с флажком 634
15.3.5. Класс RadioMenuItem: пункт меню с переключателем 635
15.3.6. Класс SeparatorMenuItem: разделитель пунктов меню 636
15.3.7. Класс CustomMenuItem: произвольный пункт меню 637
15.4. Класс MenuButton: кнопка вызова меню 638
15.5. Класс SplitMenuButton: кнопка с меню 641
15.6. Класс PopupWindow: всплывающее окно 642
15.6.1. Отображение и сокрытие всплывающего окна 642
15.6.2. Изменение и получение размеров всплывающего окна 644
15.6.3. Местоположение всплывающего окна на экране 645
15.6.4. Класс Popup 646
15.7. Класс PopupControl: всплывающее окно 647
15.8. Класс Tooltip: всплывающие подсказки 649
15.9. Класс ContextMenu: контекстное меню 652
15.10. Класс ContextMenuEvent: событие вызова контекстного меню 653
Глава 16. Диалоговые окна
655
16.1. Класс Dialog 655
16.1.1. Создание и отображение диалогового окна 655
16.1.2. Размеры и местоположение диалогового окна 658
16.1.3. Обработка событий 658
16.1.4. Класс DialogPane 660
16.1.5. Класс ButtonType: кнопки внутри диалогового окна 662
16.1.6. Получение результата 663
16.2. Класс Alert: окно с сообщением 664
16.3. Класс TextInputDialog: окно с текстовым полем 667
16.4. Класс ChoiceDialog: окно со списком 668
16.5. Класс DirectoryChooser: окно для выбора папки 669
16.6. Класс FileChooser: окно для выбора файла 671
Глава 17. Графики и диаграммы
675
17.1. Класс Chart 675
17.2. Класс PieChart: круговая диаграмма 676
17.3. Класс XYChart 678
17.3.1. Класс Axis: ось диаграммы 679
17.3.2. Классы ValueAxis и NumberAxis: ось диаграммы с числовыми значениями 681
17.3.3. Свойства класса XYChart 683
17.3.4. Класс XYChart.Series: серия данных 684
17.3.5. Класс XYChart.Data: данные 685
17.3.6. Класс CategoryAxis: ось диаграммы со строковыми значениями 686
17.4. Класс LineChart: линейный график 687
17.5. Класс BarChart: гистограмма 689
17.6. Класс StackedBarChart: гистограмма 691
17.7. Класс BubbleChart: пузырьковая диаграмма 693
17.8. Класс AreaChart: линейный график с заливкой области 694
17.9. Класс StackedAreaChart: линейный график с заливкой области 696
17.10. Класс ScatterChart: диаграмма в виде символов 697
Глава 18. Аудио и видео
699
18.1. Класс AudioClip: воспроизведение аудио 699
18.2. Класс Media 702
18.3. Класс MediaPlayer 703
18.3.1. Обработка изменения статуса и ошибок 704
18.3.2. Управление воспроизведением 705
18.3.3. Настройки воспроизведения аудио и видео 707
18.4. Класс MediaView 708
18.5. Класс Track: дорожка 710
Глава 19. JavaFX CSS: изменяем вид интерфейса с помощью стилей
713
19.1. Способы встраивания определения стиля 713
19.1.1. Встраивание определения стиля в узел 713
19.1.2. Вынесение таблицы стилей в отдельный файл 714
19.1.3. Приоритет применения стилей 716
19.2. Указание значений атрибутов 717
19.2.1. Числа 717
19.2.2. Размеры 718
19.2.3. Цвет 718
19.2.4. Строки 720
19.2.5. Углы 720
19.3. Селекторы 720
19.3.1. Основные селекторы 720
19.3.2. Псевдоклассы 721
19.4. Форматирование шрифта 722
19.4.1. Имя шрифта 723
19.4.2. Стиль шрифта 723
19.4.3. Размер шрифта 723
19.4.4. Цвет текста 723
19.4.5. Жирность шрифта 723
19.4.6. Одновременное указание характеристик шрифта 724
19.4.7. Загружаемые шрифты 724
19.5. Форматирование текста 725
19.5.1. Подчеркивание и зачеркивание текста 725
19.5.2. Обрезка или перенос текста на новую строку 725
19.5.3. Горизонтальное выравнивание текста 725
19.5.4. Взаимодействие между изображением и текстом 726
19.5.5. Выравнивание изображения и текста внутри области 726
19.6. Размеры и внутренние отступы 727
19.7. Рамки 727
19.7.1. Стиль линии рамки 727
19.7.2. Толщина линии рамки 729
19.7.3. Цвет линии рамки 729
19.7.4. Рамки со скругленными углами 729
19.7.5. Расстояние между рамкой и границей 730
19.8. Фон 730
19.8.1. Цвет фона 730
19.8.2. Расстояние между фоном и границей 731
19.8.3. Скругление углов фона 731
19.8.4. Фоновый рисунок 731
19.8.5. Режим повтора фонового рисунка 731
19.8.6. Положение фонового рисунка 732
19.8.7. Размеры фонового рисунка 732
19.9. Трансформации и эффекты 733
19.9.1. Изменение прозрачности 733
19.9.2. Смещение 733
19.9.3. Масштабирование 734
19.9.4. Вращение 734
19.9.5. Изменение режима наложения 734
19.9.6. Применение эффектов 734
19.10. Изменение внешнего вида указателя мыши 735
19.11. Изменение характеристик фигуры 735
19.11.1. Фон фигуры 735
19.11.2. Обводка 735
19.11.3. Сглаживание 736
19.11.4. Скругление углов прямоугольника 736
19.12. Изменение характеристик полос прокрутки 737
Глава 20. Разное
739
20.1. Интернационализация приложения 739
20.2. Настройка запуска приложения 742
20.2.1. Опция командной строки -splash 743
20.2.2. Директива SplashScreen-Image 743
20.2.3. Класс Preloader 744
20.3. Взаимодействие между JavaFX и Swing 747
20.3.1. Класс SwingNode 747
20.3.2. Класс JFXPanel 748
20.4. Утилита jlink.exe: создание дистрибутива 750

Заключение 753
Приложение. Описание электронного архива 754
Предметный указатель 755