- Stocarea datelor în XML
- Folosind componenta JavaFX FileChooser
- Utilizarea meniului JavaFX
- Salvarea căii spre ultimul fișier deschis în setările utilizatorului
Salvarea setărilor de utilizator
Datorită clasei Preferințe. Java vă permite să salvați câteva informații despre starea aplicației. În funcție de sistemul de operare, preferințele sunt stocate în diverse locuri (de exemplu, în fișierul de registry Windows).
Următoarele două metode oferă salvarea și restaurarea setărilor aplicației noastre. Adăugați-le la sfârșitul clasei MainApp:
MainApp.java
Stocarea datelor în XML
De ce XML?
Una dintre metodele cele mai comune de stocare a datelor este utilizarea de baze de date. În timp ce datele de care avem nevoie pentru a stoca sunt obiecte, bazele de date le conțin sub formă de date relaționale (de exemplu, tabele). Aceasta se numește nepotrivire obiect-relațională a impendențelor. Pentru a aduce datele obiectului în concordanță cu tabelele relaționale, sunt necesare lucrări suplimentare. Există cadre care ajută la aducerea datelor obiect în linie cu baza de date relațională (Hibernate este una dintre cele mai populare), dar pentru a începe să le folosiți, trebuie să faceți și alte lucrări și personalizări.
Pentru modelul nostru simplu de date, este mult mai ușor să stocăm datele ca XML. Pentru a face acest lucru, vom folosi biblioteca JAXB (J ava A rchitechture pentru X ML B inding). Dacă scriem doar câteva linii de cod, JAXB ne va permite să generăm un fișier XML similar:
Exemplu de fișier XML generat
Utilizând JAXB
Biblioteca JAXB este deja inclusă în JDK. Aceasta înseamnă că nu trebuie să fie conectate biblioteci suplimentare.
JAXB oferă două funcții principale: capacitatea de a marchaliza obiecte Java în XML și delimita inversarea de la un fișier xml la obiecte Java.
Pentru ca JAXB să efectueze astfel de transformări, trebuie să ne pregătim modelul.
Pregătirea modelului de clasă JAXB
Creați o nouă clasă PersonListWrapper în pachetul ch.makery.address.model.
PersonListWrapper.java
Observați cele două adnotări:
- @XmlRootElement specifică numele elementului rădăcină.
- @XmlElement este un nume opțional pe care îl putem specifica pentru un element.
Citirea și scrierea datelor utilizând JAXB
Faceți clasa noastră MainApp responsabilă pentru citirea și scrierea datelor din aplicația noastră. Pentru aceasta, adăugați două metode la sfârșitul clasei MainApp.java:
Marshalling și demarchezing sunt gata. Acum, pentru a utiliza noile funcționalități, să creăm elemente de meniu pentru salvare și încărcare.
Acțiuni de meniu de procesare
Am creat deja un meniu în fișierul RootLayout.fxml. dar nu l-au folosit încă. Înainte de a adăuga comportament la meniul nostru, să creăm toate elementele necesare în el.
În aplicația Scene Builder, deschideți fișierul RootLayout.fxml și mutați numărul necesar de elemente de meniu (MenuItem) din fila Bibliotecă în fila Ierarhie. Creați următoarele elemente de meniu: Nou. Deschideți. . Salvare. Salvați ca. și ieșire.
Sfat: pentru a seta elementele de meniu rapidă Utilizați proprietatea Accelerator din fila Proprietăți.
Class RootLayoutController
Pentru a procesa comportamentul meniului, avem nevoie de un alt controler de clasă. În pachetul ch.makery.address.view, creați o clasă RootLayoutController.
RootLayoutController.java
Componenta FileChooser
Rețineți metodele din clasa RootLayoutController. care utilizează componenta FileChooser. Mai întâi, vom crea o nouă instanță a clasei FileChooser. Apoi, aplicați filtrul extensie - când selectați fișiere, vor fi afișate numai cele care au extensia .xml. În cele din urmă, afișăm această componentă deasupra PrimaryStage.
Dacă utilizatorul închide dialogul de selectare a fișierelor fără a selecta nimic, atunci returnarea este returnată. În caz contrar, vom lua fișierul selectat și îl vom transfera în metoda loadPersonDataFromFile (.) Sau savePersonDataToFile (.). care se află în clasa MainApp.
Legarea vizualizării FXML la clasa de controler
În aplicația Scene Builder, deschideți fișierul RootLayout.fxml. În fila Controlor, selectați RootLayoutController ca clasă de controler.
Faceți clic pe fila Ierarhie și selectați elementul de meniu. În fila Cod, ca valori ale proprietății On Action, puteți vedea toate metodele disponibile ale clasei de controler selectate. Selectați metoda care corespunde acestui element de meniu.
Repetați pasul anterior pentru fiecare element de meniu.
Închideți aplicația Scenic Builder și actualizați proiectul (faceți clic pe Actualizați (F5) în directorul rădăcină al proiectului dvs.). Acest lucru va permite mediului de dezvoltare Eclipse să "vadă" modificările făcute în aplicația Scenic Builder.
Conectarea clasei principale la clasa RootLayoutController
Deschideți clasa MainApp și înlocuiți metoda initRootLayout () cu următorul cod:
Rețineți cele două modificări: pe liniile care permit accesul controlerului la clasa principală a aplicației și ultimele trei linii pentru a încărca ultimul fișier deschis cu înregistrări.
testarea
În interiorul pachetului ch.makery.address.util, creați o nouă clasă LocalDateAdapter și copiați următorul cod:
LocalDateAdapter.java
Apoi deschideți clasa Person.java și adnotați metoda getBirthday ():
Acum, porniți din nou aplicația. Încercați să salvați și să încărcați fișierul xml cu datele. Aplicația trebuie să descarce automat ultimul fișier deschis după repornire.
Cum funcționează
Să vedem cum funcționează toate împreună:
Ce urmează?
În partea a șasea a manualului vom adăuga un calendar statistic al zilelor de naștere.