- •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 Лабораторна робота № 2. Робота з медіа. Реалізація crud за допомогою jpa та TableView.
- •Медіа-програвач
- •Табличне представлення данних
- •3.2.1 Вдосконалення коду додатка
- •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 Використання елементу акордіон для створення альтернативного варіанту панелі інструментів
Перш ніж приступати до створення акордеону необхідно трохи змінити існуючий код, щоб не було його дублікацій. Потрібно згрупувати код у функції, які будуть повертати кнопки з необхідним функціоналом. Зміни торкнуться методу setButtonsActions().
private void changeView(Node node) {
view.getChildren().clear();
if (mediaControl!=null)
mediaControl.stop();
view.getChildren().add(node);
}
private Node getMediaButton(){
return ButtonCreator.createButton(getClass().getResource("media/images/icon-0.png").toString(), new Runnable() {
public void run() {
mediaControl = new MediaControl(getClass().getResource("media/playlist/").getFile());
changeView(mediaControl);
}
});
};
private Node getBrowserButton(){
return ButtonCreator.createButton(getClass().getResource("media/images/icon-3.png").toString(), new Runnable() {
public void run() {
changeView(new Browser());
}
});
};
private Node getCrudButton(){
return ButtonCreator.createButton(getClass().getResource("media/images/icon-4.png").toString(), new Runnable() {
public void run() {
if (loggedUser.isAdmin())
changeView(new CrudView());
else{
changeView(new Text("Permission denied"));
}
}
});
};
private Node getChartButton(){
return ButtonCreator.createButton(getClass().getResource("media/images/icon-1.png").toString(), new Runnable() {
public void run() {
changeView(new ChartView());
}
});
};
private void setButtonsActions(HBox taskbar){
taskbar.getChildren().add(getMediaButton());
taskbar.getChildren().add(getBrowserButton());
taskbar.getChildren().add(getCrudButton());
taskbar.getChildren().add(getChartButton());
}
Є два варіанта впровадження елементу акордіон до додатка — це редагування існуючої сцени, чи створення нової. Простіший і красивіший є другий варіант, а тому потрібно внести зміни до метода gotoMain() і створити два нових, getToolbar() та getAccordion().
public void gotoMain(boolean accordion) {
BorderPane root = new BorderPane();
Scene scene = new Scene(root, mainW, mainH, Color.LIGHTBLUE);
scene.getStylesheets().add(JavafxApp.class.getResource("styles.css").toExternalForm());
stage.setScene(scene);
stage.sizeToScene();
stage.centerOnScreen();
view = new StackPane();
root.setCenter(view);
if (accordion){
root.setLeft(getAccordion());
} else {
root.setBottom(getToolbar());
}
setupGestureTarget(scene);
}
private Node getToolbar(){
final HBox taskbar = new HBox(10);
taskbar.setPadding(new Insets(10, 30, 40, 30));
taskbar.setPrefHeight(150);
taskbar.setAlignment(Pos.CENTER);
setButtonsActions(taskbar);
return taskbar;
}
private Node getAccordion(){
final Accordion accordion = new Accordion ();
accordion.getPanes().addAll(
new TitledPane("Media", getMediaButton()),
new TitledPane("Browser", getBrowserButton()),
new TitledPane("CRUD", getCrudButton()),
new TitledPane("Charts", getChartButton()),
new TitledPane("Toolbar", getToolsButton(false))
);
accordion.setExpandedPane(accordion.getPanes().get(0));
return accordion;
}
TitledPane — це панель, яка складається із заголовку та вмісту. В нашому випадку вмістом є кнопка. В коді перша із панелей встановлюється розгорнутою. Також в методі присутній виклик ще не написаної функції — getToolsButton(false). Через те, що при натисканні буде змінюватися попередньо розроблена панель на акордіон і навпаки, кнопці необхідно передавати параметр, за яким вона буде аналізувати і вирішувати, яку дію їй необхідно виконати. Цей метод виглядає наступним чином:
private Node getToolsButton(boolean flag){
class ToolbarChanging implements Runnable {
private boolean toAccordion;
public ToolbarChanging(boolean choise) {
toAccordion = choise;
}
public void run() {
gotoMain(toAccordion);
}
}
return (ButtonCreator.createButton(getClass().getResource("media/images/icon-2.png").toString(), new ToolbarChanging(flag) {
}));
}
Існує декілька варіантів використання вхідних параметрів у методі run(). Більш підходящий варіант для даного випадку є створення локального класу, який імплементує інтерфейс Runnable. Потрібно лише створити необхідне поле для зберігання значення і конструктор, який буде встановлювати туди значення.
Залишилося створити кнопку в методі setButtonsActions():
taskbar.getChildren().add(getToolsButton(true));
Запустивши додаток можна побачити результат (рис. 3.27).
Рис. 3.27. Панель інструментів у вигляді акордіону
