5. diel - Uloženie objektov do CSV v Jave - Dokončenie
V minulej lekcii, Uloženie objektov do CSV v Jave, sme si vytvorili formulárovú aplikáciu s databázou používateľov, ktorá ukladá inštancie do textových súborov vo formáte CSV.
V dnešnom Java tutoriáli implementujeme do našej objektovej formulárovej aplikácie načítanie užívateľov z textového súboru vo formáte CSV.
Trieda Database
Do triedy si pridáme metódu na načítanie užívateľov.
Metóda load()
Kód metódy je nasledujúci:
public void load() throws IOException { // first we empty the user list users.clear(); try { // we go through all lines in the file, divide them into parts by semicolons // then we use the split parts to add a new user for (String line : Files.readAllLines(file)) { String[] values = line.split(";"); addUser(values[0], Integer.parseInt(values[1]), LocalDate.parse(values[2])); } } catch (IOException ex) { JOptionPane.showMessageDialog(null, "The database could not be loaded, the file does not seem to exist."); } }
Najprv kolekciu users
vyprázdnime. Súbor file
budeme čítať riadok po riadku v cykle. Každý riadok rozdelíme metódou
split()
, ktoré odovzdáme oddeľovač ;
. Následne do
kolekcie users
pomocou metódy addUser()
pridáme
objekt s rozdelenými hodnotami.
Prezentačná vrstva aplikácie
Ako prvé si pripravíme nové formulárové prvky (komponenty z ToolBoxu).
Tlačidlo Save už máme, pridáme tlačidlo Load pomenované
loadJButton
, ďalej komponentu JList
pomenovanú
userList
.
Ďalej pridáme:
JTextField
- pre zadanie mena nového užívateľa,JSpinner
- na zadanie veku užívateľa,JTextField
- na zadanie dátumu registrácie užívateľa.
Ku komponentom pridáme aj patričné popisné komponenty
JLabel
. Tieto prvky môžeme zoskupiť do panelu.
V ďalšom paneli budeme mať tri komponenty JLabel
pre detail
užívateľa:
nameJLabel
,ageJLabel
,- a
registeredJLabel
.
Ďalšie tri komponenty JLabel
pridáme ako ich popis. Nakoniec
pridáme tlačidlo Add pomenované addJButton
na pridanie
užívateľa. Výsledný formulár vyzerá takto:
Metóda
actionPerformed()
tlačidla saveJButton
Z tlačidla Save odstránime vytvorenie testovacích užívateľov.
Samotné uloženie teraz vložíme do try
– catch
bloku. Keďže naša databáza výnimky posiela pomocou throws
ďalej, budeme na ne reagovať vo formulárovej časti. Po
zachytení výnimky zobrazíme JOptionPane
s chybou. Metóda
tlačidla bude teda vyzerať takto:
saveJButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { database.save(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Cannot save the database, verify your access privileges to the file."); } } });
Upozornenie na chybu, teda komunikácia s užívateľom, priamo
v triede Database
by nebolo vhodné.
Metóda
actionPerformed()
tlačidla loadJButton
Podobne vytvoríme metódu tlačidla Load:
loadJButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { database.load(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, "Cannot load from the database, verify your access privileges to the file."); } } });
V reálnej aplikácii by sa načítanie vykonalo asi automaticky po spustení aplikácie a uložení po ukončení. Pre názornosť si to však ponecháme na tlačidlách.
Metóda
valueChanged()
zoznamu userList
Teraz spracujeme kliknutie na komponent userList
, ktoré vykoná
zobrazenie detailu užívateľa do pripravených labelov:
userList.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { User user = (User)userList.getSelectedValue(); if (user != null) { nameJLabel.setText(user.getName()); ageJLabel.setText(String.valueOf(user.getAge())); registeredJLabel.setText(user.getRegistered().toString()); } } });
Kód sme opodmienkovali pre prípad, že by nebol žiadny užívateľ vybraný (list by bol prázdny).
Metóda
actionPerformed()
tlačidla addJButton
Posledným tlačidlom je tlačidlo Add pre pridanie nového užívateľa:
addJButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String name = nameJTextField.getText().replace(";", " "); int age = (int)ageJSpinner.getModel().getValue(); LocalDate registered = LocalDate.parse( registeredJTextField.getText(), DateTimeFormatter.ofPattern("d'.'M'.'y")); database.addUser(name, age, registered); } });
Keby nám užívateľ vložil do mena bodkočiarku,
aplikáciu by nám rozbil. Preto voláme metódu replace(";", " ")
,
ktorá nám tieto bodkočiarky vymení za medzery.
Prepojenie databázy s
kolekciou userList
Prejdeme do konštruktora a pridáme nasledujúci riadok pod vytvorenie okna:
userList.setModel(database.getModel());
Testovanie
Skúsime pridať nového používateľa:
Podobne by sme si mohli napísať aj mazanie používateľov.
V nasledujúcom cvičení, Riešené úlohy k 1.-5. lekciu práce so súbormi v Jave, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 0x (7.83 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java