5. diel - Uloženie objektov do CSV v Jave - Dokončenie

V predchádzajúcej 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 tutoriáli Java 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(), ktorej 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 komponent JList pomenovaný userList.

Ďalej pridáme:

  • JTextField - na 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 náležité 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:

Prázdný formulár databázy používateľov v CSV - Práca so súbormi v Jave

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 bloku try – catch. 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 necháme ako tlačidlá.

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 vybraný žiadny užívateľ (zoznam by bol prázdny).

Metóda actionPerformed() tlačidla addJButton

Posledným tlačidlom je tlačidlo Add na 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 pod vytvorenie okna pridáme nasledujúci riadok:

userList.setModel(database.getModel());

Testovanie

Skúsime pridať nového používateľa:

Formulár databázy používateľov v CSV - Práca so súbormi v Jave

Podobne by sme si mohli napísať aj mazanie používateľov.

V nasledujúcom cvičení, Riešené úlohy k lekcii 1-5 Java - Práca so súbormi, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.


 

Mal si s čímkoľvek problém? Stiahni si vzorové riešenie nižšie a porovnaj ho so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 49x (8.23 kB)
Príloha je vrátane zdrojových súborov v jazyku Java

 

Predchádzajúci článok
Uloženie objektov do CSV v Jave
Všetky články v sekcii
Práca so súbormi v Jave
Preskočiť článok
(neodporúčame)
Riešené úlohy k lekcii 1-5 Java - Práca so súbormi
Článok pre vás napísal Petr Štechmüller
Avatar
Používateľské hodnotenie:
114 hlasov
Autor se věnuje primárně programování v Javě, ale nebojí se ani webových technologií.
Aktivity