- •3.1 Лабораторна робота № 1. Створення JavaFx додатку. Авторизація користувачів.
- •Java Persistence api
- •3.1.1. Необхідне програмне забезпечення
- •3.1.2. Налаштування проекту JavaFx-додатку
- •3.1.3. Підключення бази даних
- •3.1.4. Створення моделей та їх маппінг за допомогою jpa
- •3.1.5. Створення допоміжного класу для роботи з моделями
- •3.1.6. Впровадження логіки авторизації користувача
- •Медіа-програвач
- •Табличне представлення данних
- •3.2.1 Вдосконалення коду додатка
- •3.2 Лабораторна робота № 2. Робота з медіа. Реалізація crud за допомогою jpa та TableView.
- •3.2.2 Створення інтерфейсу додатка
- •3.2.3 Створення медіа програвача
- •3.2.4 Впровадження можливості адміністрування користувачів
- •3.3 Лабораторна робота № 3. Використання вбудованого браузеру, будування графіків та створення анімації.
- •Акордеон
- •Анімація у JavaFx
- •Графіки
- •3.3.1 Інтегрування веб-браузеру до проекту
- •3.3.2 Створення графіків
- •3.3.3 Використання елементу акордіон для створення альтернативного варіанту панелі інструментів
- •3.3.4 Створення анімації кнопок
- •3.4 Лабораторна робота № 4. Технологія drag-and-drop у JavaFx-додатках. Використання стилів.
- •Drag-and-Drop
- •Стилювання додатку за допомогою css
- •3.4.1 Drag-and-Drop
- •3.4.2 Додавання можливості стилювання додатку
- •3.4.3 Створення стилів
- •3.5 Лабораторна робота № 5. Робота з JavaFx Scene Builder. 3-d трансформація у JavaFx. Розгортання додатку.
- •JavaFx Scene Builder
- •Трансформація у JavaFx
- •Розгортання JavaFx додатків
- •3.5.1 JavaFx Scene Builder
- •3.5.2 Створення логіки додатка
- •3.5.3 Розгортання додатка
3.3 Лабораторна робота № 3. Використання вбудованого браузеру, будування графіків та створення анімації.
Мета роботи: Розширити можливості додатку, впровадивши можливості обзору веб-сторінок та перегляду інформації у вигляді графіків. Познайомитись з елементом інтерфейсу користувача під назвою акордеон. Навчитися створювати анімацію.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Веб-браузер
Для роботи з вбудованим браузером створені два основних класи — WebEngine та WebView.
Клас WebEngine надає базову функціональність веб-сторінки. Він підтримує взаємодію з користувачем, таку як навігація за посиланнями, відправка HTML-форм, хоча і не взаємодіє з користувачами безпосередньо. Клас WebEngine обробляє одну сторінку одночасно. Він підтримує основні функції перегляду та завантаження HTML-контенту, доступу до DOM, а також виконання JavaScript команд.
Два конструктори дозволяють створити об'єкт WebEngine: порожній конструктор і конструктор із зазначеним URL. Якщо екземпляр класу створений за допомогою порожнього конструктора, адреса може бути передана до об'єкту WebEngine через метод load.
Клас WebView являє собою розширення класу Node. Він інкапсулює об'єкт WebEngine, включає в сцену програми HTML-контент та надає властивості і методи для застосування ефектів і перетворень. Метод getEngine() для об'єкта WebView повертає WebEngine, пов'язаний з ним.
Акордеон
Елемент Accordion в JavaFx по суті є сукупністю елементів TitledPane (титулована панель). TitledPane — це панель, яка має назву і вміст, який згортається або розгортається при натисненні на заголовок. Титулована панель може мати наступний вигляд (рис 3.16).
Додати титуловані панелі можна за допомогою методу add() або addAll():
accordion.getPanes().addAll(tps);
Також можна встановити панель, яка буде відкритою за замовченням:
accordion.setExpandedPane(tps[0]);
Рис. 3.16. Різні види Titled Pane
Вміст інформаційної комірки може бути різним і створюється користувачем. Згруповані елементи цього типу в акордеоні виглядають наступним чином (рис 3.17):
Рис. 3.17. Приклад елементу Accordion
Анімація у JavaFx
Анімація у JavaFX може бути створена за допомогою елементів Transition (перехід) та Timeline Animation (анімація за часовою шкалою).
Анімації переходів відбуваються у внутрішній часовій шкалі. Вони можуть бути скомпоновані для створення паралельної анімації. В залежності від властивості, яка буде змінюватись, можна виділити декілька типів переходів.
Перехід прозорості (Fade Transition). Код у прикладі нижче створює прямокутник з закругленими краями, потім створюється анімація прозорості і запускається за допомогою метода play().
final Rectangle rect1 = new Rectangle(10, 10, 100, 100);
rect1.setArcHeight(20);
rect1.setArcWidth(20);
rect1.setFill(Color.RED);
...
FadeTransition ft = new FadeTransition(Duration.millis(3000), rect1);
ft.setFromValue(1.0);
ft.setToValue(0.1);
ft.setCycleCount(Timeline.INDEFINITE);
ft.setAutoReverse(true);
ft.play();
Перехід по шляху (Path Transition). Змінюється позиція елемента по встановленому маршруту (рис. 3.18).
Рис. 3.18. Перехід по шляху елемента
final Rectangle rectPath = new Rectangle (0, 0, 40, 40);
rectPath.setArcHeight(10);
rectPath.setArcWidth(10);
rectPath.setFill(Color.ORANGE);
...
Path path = new Path();
path.getElements().add(new MoveTo(20,20));
path.getElements().add(new CubicCurveTo(380, 0, 380, 120, 200, 120));
path.getElements().add(new CubicCurveTo(0, 120, 0, 240, 380, 240));
PathTransition pathTransition = new PathTransition();
pathTransition.setDuration(Duration.millis(4000));
pathTransition.setPath(path);
pathTransition.setNode(rectPath);
pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
pathTransition.setCycleCount(Timeline.INDEFINITE);
pathTransition.setAutoReverse(true);
pathTransition.play();
Паралельний перехід (Parallel Transition). Робота декількох анімацій виконується одночасно (рис. 3.19).
Рис. 3.19. Паралельний перехід
Rectangle rectParallel = new Rectangle(10,200,50, 50);
rectParallel.setArcHeight(15);
rectParallel.setArcWidth(15);
rectParallel.setFill(Color.DARKBLUE);
rectParallel.setTranslateX(50);
rectParallel.setTranslateY(75);
...
FadeTransition fadeTransition =
new FadeTransition(Duration.millis(3000), rectParallel);
fadeTransition.setFromValue(1.0f);
fadeTransition.setToValue(0.3f);
fadeTransition.setCycleCount(2);
fadeTransition.setAutoReverse(true);
TranslateTransition translateTransition =
new TranslateTransition(Duration.millis(2000), rectParallel);
translateTransition.setFromX(50);
translateTransition.setToX(350);
translateTransition.setCycleCount(2);
translateTransition.setAutoReverse(true);
RotateTransition rotateTransition =
new RotateTransition(Duration.millis(3000), rectParallel);
rotateTransition.setByAngle(180f);
rotateTransition.setCycleCount(4);
rotateTransition.setAutoReverse(true);
ScaleTransition scaleTransition =
new ScaleTransition(Duration.millis(2000), rectParallel);
scaleTransition.setToX(2f);
scaleTransition.setToY(2f);
scaleTransition.setCycleCount(2);
scaleTransition.setAutoReverse(true);
parallelTransition = new ParallelTransition();
parallelTransition.getChildren().addAll(
fadeTransition,
translateTransition,
rotateTransition,
scaleTransition
);
parallelTransition.setCycleCount(Timeline.INDEFINITE);
parallelTransition.play();
Також існують ще переходи обертання (Rotate Transition), послідовні переходи (Sequential Transition) та ін.
Отже, в прикладах вище анімація відбувається на основі властивостей, таких як розмір, колір, прозорість, а для створення анімації за часовою шкалою потрібно використовувати Timeline (часову шкалу). JavaFX підтримує анімацію з ключовими кадрами (key frame animation). В цих кадрах визначається початкове значення переходу властивості та кінцеве значення цього переходу в конкретні часові проміжки. Система сама зробить необхідну анімацію. Також її можна контролювати: запускати, зупиняти, повертати, починати спочатку, повторяти окремі моменти. Наступний приклад продемонструє використання анімації за допомогою часової шкали. Буде створений прямокутник і вказані зміни властивості координати Х (рис. 3.20):
final Rectangle rectBasicTimeline = new Rectangle(100, 50, 100, 50);
rectBasicTimeline.setFill(Color.BROWN);
...
final Timeline timeline = new Timeline();
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.setAutoReverse(true);
final KeyValue kv = new KeyValue(rectBasicTimeline.xProperty(), 300);
final KeyFrame kf = new KeyFrame(Duration.millis(500), kv);
timeline.getKeyFrames().add(kf);
timeline.play();
Рис. 3.20. Зсув прямокутника за допомогою часової шкали
