Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
JavaFX.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
4.88 Mб
Скачать

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. Панель інструментів у вигляді акордіону