Николай Прохоренок. JavaFX. В подлиннике

JavaFX. В подлиннике

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

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

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

Оглавление книги JavaFX. В подлиннике

Предисловие

Глава 1. Первые шаги

1.1. Установка OpenJDK
1.2. Установка библиотеки JavaFX
1.3. Создание и запуск JavaFX-приложения из командной строки
1.4. Установка и настройка редактора Eclipse
1.5. Установка модуля e(fx)clipse
1.6. Установка программы Scene Builder
1.7. Создание JavaFX-приложения в Eclipse. Способ 1
1.8. Создание JavaFX-приложения в Eclipse. Способ 2
1.9. Указание идентификаторов компонентов
1.10. Доступ к главному окну приложения внутри класса контроллера
1.11. Метод initialize() и интерфейс Initializable
1.12. Методы init() и stop()
1.13. Получение параметров из командной строки
1.14. Завершение работы JavaFX-приложения
1.15. Выполнение длительных операций

Глава 2. Управление окном приложения

2.1. Создание и отображение окна
2.2. Указание стиля окна
2.3. Изменение и получение размеров окна
2.4. Местоположение окна на экране
    2.4.1. Класс Screen: размеры экрана
2.5. Разворачивание и сворачивание окна
2.6. Управление фокусом ввода и положением окна по оси Z
2.7. Управление прозрачностью окна
2.8. Модальные окна
2.9. Смена иконки в заголовке окна
2.10. Изменение цвета фона
2.11. Использование изображения в качестве фона
2.12. Создание окна произвольной формы
2.13. Закрытие окна из программы

Глава 3. Размещение компонентов в окне

3.1. Класс Scene
    3.1.1. Создание объекта
    3.1.2. Размеры сцены
    3.1.3. Местоположение сцены
    3.1.4. Фон сцены
3.2. Размеры контейнеров и компонентов
3.3. Внутренние отступы
    3.3.1. Класс Insets
3.4. Местоположение узлов внутри контейнера
3.5. Фон контейнеров и компонентов
    3.5.1. Класс Background
    3.5.2. Класс BackgroundFill: заливка сплошным цветом, градиентом или текстурой
    3.5.3. Класс CornerRadii: радиус скругления углов
    3.5.4. Класс BackgroundImage: фоновое изображение
3.6. Рамка
3.7. Изменение прозрачности узла
3.8. Управление видимостью узла
3.9. Управление доступностью узла
3.10. Абсолютное позиционирование
    3.10.1. Класс Group
    3.10.2. Класс Pane
3.11. Горизонтальное и вертикальное выравнивание
    3.11.1. Класс HBox: выравнивание по горизонтали
    3.11.2. Класс VBox: выравнивание по вертикали
3.12. Класс GridPane: размещение узлов внутри ячеек таблицы
    3.12.1. Класс ColumnConstraints: описание столбцов
    3.12.2. Класс RowConstraints: описание строк
    3.12.3. Добавление узла в ячейку таблицы
    3.12.4. Объединение нескольких ячеек
    3.12.5. Изменение свойств ячейки
    3.12.6. Изменение свойств таблицы
3.13. Класс FlowPane
3.14. Класс BorderPane
3.15. Класс StackPane
3.16. Класс TilePane
3.17. Класс AnchorPane: привязка узла к сторонам панели
3.18. Класс TabPane: панель с вкладками
    3.18.1. Класс Tab: вкладка
    3.18.2. Свойства класса TabPane
3.19. Класс TitledPane: панель с заголовком
3.20. Класс Accordion: панель аккордеон
3.21. Класс SplitPane: панель с изменяемыми размерами областей

Глава 4. Обработка событий

4.1. Назначение обработчиков событий
4.2. Блокировка и удаление обработчика
4.3. Последовательность вызова обработчиков
4.4. Генерация события из программы
4.5. Класс Event
4.6. Использование таймеров
    4.6.1. Класс Timer
    4.6.2. Класс TimerTask
    4.6.3. Изменение свойств узлов из разных потоков
4.7. События окна
    4.7.1. Отображение, сокрытие и закрытие окна
    4.7.2. Изменение положения окна и его размеров
    4.7.3. Разворачивание и сворачивание окна
4.8. События клавиатуры
    4.8.1. Типы событий
    4.8.2. Получение информации о событии
    4.8.3. Коды клавиш
    4.8.4. Управление фокусом ввода
    4.8.5. Назначение клавиш быстрого доступа
4.9. События мыши
    4.9.1. Типы событий
    4.9.2. Получение информации о событии
    4.9.3. Прокрутка колесика мыши
    4.9.4. Изменение внешнего вида указателя мыши
4.10. Работа с буфером обмена
    4.10.1. Класс Clipboard
    4.10.2. Класс ClipboardContent
4.11. Технология drag & drop
    4.11.1. Типы событий
    4.11.2. Запуск перетаскивания
    4.11.3. Обработка сброса
    4.11.4. Получение информации о событии
    4.11.5. Класс Dragboard
    4.11.6. Класс MouseDragEvent
4.12. Класс Robot: генерация событий мыши и клавиатуры

Глава 5. 2D-графика

5.1. Указание координат и размеров
    5.1.1. Класс Point2D: координаты точки
    5.1.2. Класс Dimension2D: размеры прямоугольной области
    5.1.3. Класс Rectangle2D: координаты и размеры прямоугольной области
    5.1.4. Классы Bounds и BoundingBox
5.2. Класс Paint
5.3. Класс Color: цвет
5.4. Класс LinearGradient: линейный градиент
5.5. Класс RadialGradient: радиальный градиент
5.6. Режимы наложения
5.7. Маски слоя
5.8. Класс Shape
    5.8.1. Изменение характеристик фона фигуры
    5.8.2. Изменение характеристик обводки
    5.8.3. Управление режимом сглаживания
5.9. Класс Line: прямая линия
5.10. Класс Arc: дуга или сектор
5.11. Класс Polyline: ломаная линия
5.12. Класс CubicCurve: кубическая кривая Безье
5.13. Класс QuadCurve: квадратичная кривая
5.14. Класс Rectangle: прямоугольник
5.15. Класс Ellipse: эллипс
5.16. Класс Circle: круг
5.17. Класс Polygon: многоугольник
5.18. Класс Text: текст
    5.18.1. Создание объекта
    5.18.2. Подчеркивание и зачеркивание текста
    5.18.3. Класс Font: изменение характеристик шрифта
    5.18.4. Выравнивание текста
    5.18.5. Выделение фрагмента текста
    5.18.6. Управление положением текстового курсора
    5.18.7. Класс HitInfo
    5.18.8. Класс TextFlow
5.19. Класс Path: траектория
    5.19.1. Класс PathElement
    5.19.2. Классы MoveTo и ClosePath
    5.19.3. Класс HLineTo: горизонтальная линия
    5.19.4. Класс VLineTo: вертикальная линия
    5.19.5. Класс LineTo: линия
    5.19.6. Класс ArcTo: дуга
    5.19.7. Класс CubicCurveTo: кубическая кривая Безье
    5.19.8. Класс QuadCurveTo: квадратичная кривая
5.20. Класс SVGPath

Глава 6. Работа с изображениями

6.1. Класс Image: загрузка изображения из файла
6.2. Класс ImageView: отображение изображения в окне
6.3. Интерфейс PixelReader: получение цвета пикселей
6.4. Класс WritableImage: создание нового изображения
6.5. Интерфейс PixelWriter: изменение цвета пикселей
6.6. Класс SwingFXUtils
6.7. Класс ImagePattern
6.8. Создание снимков сцены, узла и экрана

Глава 7. Canvas API

7.1. Класс Canvas
7.2. Класс GraphicsContext
    7.2.1. Изменение характеристик заливки
    7.2.2. Изменение характеристик обводки
    7.2.3. Изменение цвета отдельных пикселей
    7.2.4. Рисование линий
    7.2.5. Рисование траектории
    7.2.6. Рисование фигур
    7.2.7. Вывод текста
    7.2.8. Вывод изображения
    7.2.9. Очистка прямоугольной области или всего холста
    7.2.10. Сохранение и восстановление состояния
    7.2.11. Применение эффектов и трансформаций

Глава 8. Трансформации и эффекты

8.1. Трансформации
    8.1.1. Методы класса Node
    8.1.2. Классы Transform и Affine
    8.1.3. Класс Translate: смещение
    8.1.4. Класс Scale: масштабирование
    8.1.5. Класс Rotate: вращение
    8.1.6. Класс Shear: сдвиг
8.2. Эффекты
    8.2.1. Методы класса Node
    8.2.2. Класс DropShadow: внешняя тень
    8.2.3. Класс InnerShadow: внутренняя тень
    8.2.4. Класс Shadow: тень
    8.2.5. Класс Reflection: зеркальное отражение
    8.2.6. Класс GaussianBlur: размытие по Гауссу
    8.2.7. Класс MotionBlur: размытие в движении
    8.2.8. Класс BoxBlur: размытие
    8.2.9. Класс Bloom: свечение
    8.2.10. Класс Glow: свечение
    8.2.11. Класс PerspectiveTransform: трансформация перспективы
    8.2.12. Класс ColorAdjust: изменение цветового тона, насыщенности, яркости и контраста
    8.2.13. Класс SepiaTone: эффект состаривания изображения
    8.2.14. Класс Lighting: эффект освещения источником света
    8.2.15. Класс Light: источник освещения
    8.2.16. Класс Blend: смешивание
    8.2.17. Класс ColorInput
    8.2.18. Класс ImageInput
    8.2.19. Класс DisplacementMap: искажение

Глава 9. Создание анимации

9.1. Класс Duration: продолжительность выполнения анимации
9.2. Класс Animation
    9.2.1. Настройка параметров
    9.2.2. Использование меток
    9.2.3. Запуск и остановка анимации
9.3. Классы Transition и Interpolator
9.4. Класс FadeTransition: изменение прозрачности
9.5. Класс TranslateTransition: изменение местоположения
9.6. Класс PathTransition: движение вдоль траектории
9.7. Класс ScaleTransition: изменение масштаба
9.8. Класс RotateTransition: вращение
9.9. Класс FillTransition: изменение цвета заливки
9.10. Класс StrokeTransition: изменение цвета обводки
9.11. Класс ParallelTransition: параллельное выполнение нескольких анимаций
9.12. Класс SequentialTransition: последовательное выполнение нескольких анимаций
9.13. Класс PauseTransition: пауза во время выполнения анимации
9.14. Класс Timeline: шкала времени
    9.14.1. Класс KeyFrame
    9.14.2. Класс KeyValue
9.15. Класс AnimationTimer

Глава 10. 3D-графика

10.1. Класс Point3D
10.2. Класс Shape3D
10.3. Класс Box: куб
10.4. Класс Cylinder: цилиндр
10.5. Класс Sphere: сфера
10.6. Класс MeshView: 3D-фигура произвольной формы
10.7. Класс SubScene
10.8. Управление камерой
10.9. Управление источником света

Глава 11. Основные компоненты

11.1. Поиск узла
11.2. Использование JavaFX-свойств
    11.2.1. Создание JavaFX-свойства
    11.2.2. JavaFX-свойства только для чтения
    11.2.3. Назначение и удаление обработчиков
        Интерфейсы InvalidationListener и Observable
        Интерфейсы ChangeListener<T> и ObservableValue<T>
    11.2.4. Двунаправленное связывание
    11.2.5. Однонаправленное связывание
    11.2.6. Выражения
11.3. Классы Labeled и Label
11.4. Класс ButtonBase
11.5. Класс Hyperlink: гиперссылка
11.6. Класс Button: командная кнопка
11.7. Класс ButtonBar
11.8. Переключатели
    11.8.1. Класс ToggleButton и интерфейс Toggle
    11.8.2. Класс RadioButton
    11.8.3. Класс ToggleGroup: объединение переключателей в группу
11.9. Класс CheckBox: флажок
11.10. Класс Slider: шкала с ползунком
11.11. Индикаторы хода процесса
    11.11.1. Класс ProgressIndicator
    11.11.2. Класс ProgressBar
    11.11.3. Класс Task<V>: задача для выполнения в отдельном потоке
    11.11.4. Интерфейс Worker<V>
    11.11.5. Обработка событий выполнения задачи
    11.11.6. Класс Service<V>
11.12. Класс ScrollBar: полоса прокрутки
11.13. Класс ScrollPane: область с полосами прокрутки
11.14. Класс ToolBar: панель инструментов
11.15. Класс Separator: разделительная линия

Глава 12. Работа с текстом и Интернетом

12.1. Класс Spinner<T>
12.2. Класс TextInputControl
    12.2.1. Основные свойства и методы
    12.2.2. Управление позицией текстового курсора
    12.2.3. Класс IndexRange: работа с диапазоном
    12.2.4. Работа с выделением
    12.2.5. Копирование и вставка текста
    12.2.6. Отмена и повтор ввода
    12.2.7. Класс TextFormatter<V>
12.3. Класс TextField: однострочное текстовое поле
12.4. Класс PasswordField: поле для ввода пароля
12.5. Класс TextArea: многострочное текстовое поле
12.6. Класс HTMLEditor: текстовый редактор
12.7. Класс WebView: Web-браузер
12.8. Класс WebEngine
    12.8.1. Загрузка Web-страницы
    12.8.2. Получение информации о Web-странице
    12.8.3. Взаимодействие с JavaScript
    12.8.4. Получение информации о просмотренных страницах

Глава 13. Списки

13.1. Интерфейс ObservableList<E>
    13.1.1. Создание списка
    13.1.2. Методы из интерфейса ObservableList<E>
    13.1.3. Назначение и удаление обработчиков. Интерфейс ListChangeListener<E>
    13.1.4. Методы из класса FXCollections
13.2. Класс ChoiceBox<T>: раскрывающийся список
13.3. Класс SingleSelectionModel<T>: выбор одного элемента
13.4. Класс ComboBoxBase<T>
13.5. Класс ComboBox<T>: раскрывающийся список
13.6. Класс ColorPicker: выбор цвета
13.7. Класс DatePicker: выбор даты
13.8. Класс ListView<T>: список
    13.8.1. Создание объекта
    13.8.2. Основные свойства и методы
    13.8.3. Класс FocusModel<T>: управление фокусом ввода
    13.8.4. Редактирование элементов
13.9. Класс MultipleSelectionModel<T>: выбор нескольких элементов

Глава 14. Таблицы и иерархические списки

14.1. Класс TableView<S>: таблица
    14.1.1. Создание таблицы
    14.1.2. Класс TableColumn<S, T>: создание столбцов
    14.1.3. Объединение столбцов в группу
    14.1.4. Управление размерами столбцов
    14.1.5. Изменение видимости столбца
    14.1.6. Управление прокруткой
    14.1.7. Класс TableViewSelectionModel<S>: управление выбором строк и отдельных ячеек
    14.1.8. Класс TableViewFocusModel<S>: управление фокусом ввода
    14.1.9. Изменение свойств ячеек столбца
    14.1.10. Изменение свойств ячеек строки
    14.1.11. Сортировка элементов
    14.1.12. Редактирование элементов
    14.1.13. Изменение порядка следования столбцов
14.2. Класс TreeView<T>: иерархический список
    14.2.1. Создание иерархического списка
    14.2.2. Класс TreeItem<T>: элемент иерархического списка
    14.2.3. Обработка событий
    14.2.4. Управление прокруткой
    14.2.5. Управление выбором элементов
    14.2.6. Управление фокусом ввода
    14.2.7. Редактирование элементов
    14.2.8. Класс CheckBoxTreeItem<T>: флажок в качестве элемента списка
14.3. Класс TreeTableView<S>: иерархический список со столбцами
    14.3.1. Создание списка и добавление элементов
    14.3.2. Класс TreeTableColumn<S, T>: создание столбцов
    14.3.3. Объединение столбцов в группу
    14.3.4. Управление размерами столбцов
    14.3.5. Изменение видимости столбца
    14.3.6. Управление прокруткой
    14.3.7. Класс TreeTableViewSelectionModel<S>: управление выбором строк и отдельных ячеек
    14.3.8. Класс TreeTableViewFocusModel<S>: управление фокусом ввода
    14.3.9. Изменение свойств ячеек столбца
    14.3.10. Изменение свойств ячеек строки
    14.3.11. Сортировка элементов
    14.3.12. Редактирование элементов
    14.3.13. Изменение порядка следования столбцов

Глава 15. Меню и всплывающие окна

15.1. Класс MenuBar: панель меню
15.2. Класс Menu: отдельное или вложенное меню
15.3. Пункты меню
    15.3.1. Класс MenuItem: пункт меню
    15.3.2. Обработка выбора пункта меню
    15.3.3. Назначение клавиш быстрого доступа
    15.3.4. Класс CheckMenuItem: пункт меню с флажком
    15.3.5. Класс RadioMenuItem: пункт меню с переключателем
    15.3.6. Класс SeparatorMenuItem: разделитель пунктов меню
    15.3.7. Класс CustomMenuItem: произвольный пункт меню
15.4. Класс MenuButton: кнопка вызова меню
15.5. Класс SplitMenuButton: кнопка с меню
15.6. Класс PopupWindow: всплывающее окно
    15.6.1. Отображение и сокрытие всплывающего окна
    15.6.2. Изменение и получение размеров всплывающего окна
    15.6.3. Местоположение всплывающего окна на экране
    15.6.4. Класс Popup
15.7. Класс PopupControl: всплывающее окно
15.8. Класс Tooltip: всплывающие подсказки
15.9. Класс ContextMenu: контекстное меню
15.10. Класс ContextMenuEvent: событие вызова контекстного меню

Глава 16. Диалоговые окна

16.1. Класс Dialog<R>
    16.1.1. Создание и отображение диалогового окна
    16.1.2. Размеры и местоположение диалогового окна
    16.1.3. Обработка событий
    16.1.4. Класс DialogPane
    16.1.5. Класс ButtonType: кнопки внутри диалогового окна
    16.1.6. Получение результата
16.2. Класс Alert: окно с сообщением
16.3. Класс TextInputDialog: окно с текстовым полем
16.4. Класс ChoiceDialog<T>: окно со списком
16.5. Класс DirectoryChooser: окно для выбора папки
16.6. Класс FileChooser: окно для выбора файла

Глава 17. Графики и диаграммы

17.1. Класс Chart
17.2. Класс PieChart: круговая диаграмма
17.3. Класс XYChart<X, Y>
    17.3.1. Класс Axis<T>: ось диаграммы
    17.3.2. Классы ValueAxis<T> и NumberAxis: ось диаграммы с числовыми значениями
    17.3.3. Свойства класса XYChart<X, Y>
    17.3.4. Класс XYChart.Series<X, Y>: серия данных
    17.3.5. Класс XYChart.Data<X, Y>: данные
    17.3.6. Класс CategoryAxis: ось диаграммы со строковыми значениями
17.4. Класс LineChart<X, Y>: линейный график
17.5. Класс BarChart<X, Y>: гистограмма
17.6. Класс StackedBarChart<X, Y>: гистограмма
17.7. Класс BubbleChart<X, Y>: пузырьковая диаграмма
17.8. Класс AreaChart<X, Y>: линейный график с заливкой области
17.9. Класс StackedAreaChart<X, Y>: линейный график с заливкой области
17.10. Класс ScatterChart<X, Y>: диаграмма в виде символов

Глава 18. Аудио и видео

18.1. Класс AudioClip: воспроизведение аудио
18.2. Класс Media
18.3. Класс MediaPlayer
    18.3.1. Обработка изменения статуса и ошибок
    18.3.2. Управление воспроизведением
    18.3.3. Настройки воспроизведения аудио и видео
18.4. Класс MediaView
18.5. Класс Track: дорожка

Глава 19. JavaFX CSS. Изменяем вид интерфейса с помощью стилей

19.1. Способы встраивания определения стиля
    19.1.1. Встраивание определения стиля в узел
    19.1.2. Вынесение таблицы стилей в отдельный файл
    19.1.3. Приоритет применения стилей
19.2. Указание значений атрибутов
    19.2.1. Числа
    19.2.2. Размеры
    19.2.3. Цвет
    19.2.4. Строки
    19.2.5. Углы
19.3. Селекторы
    19.3.1. Основные селекторы
    19.3.2. Псевдоклассы
19.4. Форматирование шрифта
    19.4.1. Имя шрифта
    19.4.2. Стиль шрифта
    19.4.3. Размер шрифта
    19.4.4. Цвет текста
    19.4.5. Жирность шрифта
    19.4.6. Одновременное указание характеристик шрифта
    19.4.7. Загружаемые шрифты
19.5. Форматирование текста
    19.5.1. Подчеркивание и зачеркивание текста
    19.5.2. Обрезка или перенос текста на новую строку
    19.5.3. Горизонтальное выравнивание текста
    19.5.4. Взаимодействие между изображением и текстом
    19.5.5. Выравнивание изображения и текста внутри области
19.6. Размеры и внутренние отступы
19.7. Рамки
    19.7.1. Стиль линии рамки
    19.7.2. Толщина линии рамки
    19.7.3. Цвет линии рамки
    19.7.4. Рамки со скругленными углами
    19.7.5. Расстояние между рамкой и границей
19.8. Фон
    19.8.1. Цвет фона
    19.8.2. Расстояние между фоном и границей
    19.8.3. Скругление углов фона
    19.8.4. Фоновый рисунок
    19.8.5. Режим повтора фонового рисунка
    19.8.6. Положение фонового рисунка
    19.8.7. Размеры фонового рисунка
19.9. Трансформации и эффекты
    19.9.1. Изменение прозрачности
    19.9.2. Смещение
    19.9.3. Масштабирование
    19.9.4. Вращение
    19.9.5. Изменение режима наложения
    19.9.6. Применение эффектов
19.10. Изменение внешнего вида указателя мыши
19.11. Изменение характеристик фигуры
    19.11.1. Фон фигуры
    19.11.2. Обводка
    19.11.3. Сглаживание
    19.11.4. Скругление углов прямоугольника
19.12. Изменение характеристик полос прокрутки

Глава 20. Разное

20.1. Интернационализация приложения
20.2. Настройка запуска приложения
    20.2.1. Опция командной строки -splash
    20.2.2. Директива SplashScreen-Image
    20.2.3. Класс Preloader
20.3. Взаимодействие между JavaFX и Swing
    20.3.1. Класс SwingNode
    20.3.2. Класс JFXPanel
20.4. Утилита jlink.exe: создание дистрибутива

Заключение