Підручник по javafx 8 - частина 5 зберігання даних в xml

Підручник по javafx 8 - частина 5 зберігання даних в xml

  • Зберігання даних в XML
  • Використання компонента JavaFX FileChooser
  • Використання компонента JavaFX Menu
  • Збереження шляху до останнього відкритого файлу в призначених для користувача настройках

Збереження налаштувань

Завдяки класу Preferences. Java дозволяє зберігати деяку інформацію про стан програми. Залежно від операційної системи, Preferences зберігаються в різних місцях (наприклад, в файлі реєстру Windows).

Наступні два методи забезпечують збереження і відновлення налаштувань нашого застосування. Додайте їх в кінець класу MainApp:

MainApp.java

Зберігання даних в XML

Чому саме XML?

Один з найбільш поширених способів зберігання даних, це використання баз даних. У той час, як дані, які ми повинні зберігати, є об'єктами, бази даних містять їх у вигляді реляційних даних (наприклад, таблиць). Це називається об'єктно-реляційне неузгодженість імпенданс. Для того, щоб привести наші об'єктні дані у відповідність з реляційними таблицями, потрібно виконати додаткову роботу. Існують фреймворки, які допомагають наводити об'єктні дані у відповідність з реляційною базою даних (Hibernate - один з найбільш популярних), але щоб почати їх використовувати, також необхідно виконати додаткову роботу і настройку.

Для нашої простої моделі даних набагато легше зберігати дані у вигляді XML. Для цього ми будемо використовувати бібліотеку JAXB (J ava A rchitechture for X ML B inding). Написавши всього кілька рядків коду, JAXB дозволить нам згенерувати приблизно такий XML-файл:

Приклад згенерованого XML-файла

Використання JAXB

Бібліотека JAXB вже включена в JDK. Це означає, що ніяких додаткових бібліотек підключати не доведеться.

JAXB надає дві основні функції: здатність до маршаллірованію об'єктів Java в XML і зворотний демаршалізацію з xml-файлу в об'єкти Java.

Для того, щоб за допомогою JAXB можна було виконувати подібні перетворення, нам необхідно підготувати нашу модель.

Підготовка класу-моделі для JAXB

Створіть в пакеті ch.makery.address.model новий клас PersonListWrapper.

PersonListWrapper.java

Зверніть увагу на дві анотації:

  • @XmlRootElement визначає ім'я кореневого елемента.
  • @XmlElement це необов'язкове ім'я, яке ми можемо поставити для елемента.

Читання і запис даних за допомогою JAXB

Зробимо наш клас MainApp відповідальним за читання і запис даних нашого застосування. Для цього додайте в кінець класу MainApp.java два методи:

Маршаллінг і демаршалізація готові. Тепер для того, щоб використовувати новий функціонал, давайте створимо пункти меню для збереження і завантаження.

Обробка дій меню

Ми вже створювали меню в файлі RootLayout.fxml. але поки не використовували його. Перед тим, як ми додамо в наше меню поведінку, давайте створимо в ньому всі необхідні пункти.

У додатку Scene Builder відкрийте файл RootLayout.fxml і перенесіть необхідну кількість пунктів меню (MenuItem) з вкладки Library на вкладку Hierarchy. Створіть наступні пункти меню: New. Open. . Save. Save as. і Exit.

Підручник по javafx 8 - частина 5 зберігання даних в xml

Підказка: для установки на пункти меню гарячих клавіш Використовуйте властивість Accelerator у вкладці Properties.

клас RootLayoutController

Для обробки поведінки меню нам необхідний ще один клас-контролер. У пакеті ch.makery.address.view створіть клас RootLayoutController.

RootLayoutController.java

компонент FileChooser

Зверніть увагу на методи в класі RootLayoutController. які використовують компонент FileChooser. Спершу ми створюємо новий екземпляр класу FileChooser. Потім застосовуємо фільтр розширення - при виборі файлів будуть показуватися тільки ті, які мають розширення .xml. Ну і нарешті, ми відображаємо даний компонент вище PrimaryStage.

Якщо користувач закриває діалогове вікно вибору файлів нічого не вибравши, то повертається null. В іншому випадку ми беремо обраний файл і передаємо його в методи loadPersonDataFromFile (.) Або savePersonDataToFile (.). які знаходяться в класі MainApp.

Зв'язування fxml-вистави з класом-контролером

У додатку Scene Builder відкрийте файл RootLayout.fxml. У вкладці Controller як класу-контролера виберіть значення RootLayoutController.

Перейдіть на вкладку Hierarchy і виберіть пункт меню. У вкладці Code як значення властивості On Action ви можете побачити всі доступні методи обраного класу-контролера. Виберіть метод, який відповідає цьому пункту меню.

Підручник по javafx 8 - частина 5 зберігання даних в xml

Повторіть попередній крок для кожного пункту меню.

Закрийте програму Scene Builder і обновіть проект (натисніть Refresh (F5) на кореневій папці вашого проекту). Це дозволить середовищі розробки Eclipse "побачити" зміни, зроблені в додатку Scene Builder.

Зв'язування головного класу з класом RootLayoutController

Відкрийте клас MainApp і замініть метод initRootLayout () наступним кодом:

Зверніть увагу на два зміни: на рядки, що дають доступ контролера до головного класу програми та на три останні рядки для завантаження останнього відкритого файлу із записами.

тестування

Усередині пакета ch.makery.address.util створіть новий клас LocalDateAdapter і скопіюйте туди наступний код:

LocalDateAdapter.java

Потім відкрийте клас Person.java і анотує метод getBirthday ():

Тепер запустіть додаток ще раз. Спробуйте зберегти і завантажити xml-файл з даними. Додаток має автоматично завантажувати останній відкритий файл після перезапуску.

Як це працює

Давайте подивимося як це все працює разом:

Що далі?

У 6-ї частини підручника ми додамо статистичний графік днів народжень.

Вам можуть бути цікаві також деякі інші статті

Схожі статті