Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 5 - Uložení objektů do CSV v Javě - Dokončení

V minulé lekci, Uložení objektů do CSV v Javě, jsme si vytvořili formulářovou aplikaci s databází uživatelů, která ukládá instance do textových souborů ve formátu CSV.

V dnešním Java tutoriálu implementujeme do naší objektové formulářové aplikace načtení uživatelů z textového souboru ve formátu CSV.

Třída Databaze

Do třídy si přidáme metodu pro načtení uživatelů.

Metoda nacti()

Kód metody je následující:

public void nacti() throws IOException {
    //nejprve vyprázdníme uzivatele
    uzivatele.clear();
    try {
        //projdeme všechny řádky v souboru, každý rozdělíme na části podle středníků
        //rozdělené části pak použijeme pro přidání nového uživatele
        for (String radek : Files.readAllLines(soubor)) {
            String[] rozdeleno = radek.split(";");
            pridejUzivatele(rozdeleno[0], Integer.parseInt(rozdeleno[1]), LocalDate.parse(rozdeleno[2]));
        }
    } catch (IOException ex) {
        JOptionPane.showMessageDialog(null, "Databázi se nepodařilo načíst, soubor zřejmě neexistuje.");
    }
}

Nejprve kolekci uzivatele vyprázdníme. Soubor soubor budeme číst řádek po řádku v cyklu. Každý řádek rozdělíme metodou split(), které předáme oddělovač ;. Následně do kolekce uzivatele, pomocí metody pridejUzivatele(), přidáme objekt s rozdělenými hodnotami.

Prezentační vrstva aplikace

Jako první si připravíme nové formulářové prvky (komponenty z ToolBoxu). Tlačítko Uložit už máme, přidáme tlačítko Načíst pojmenované nacistJButton, dále komponentu JList pojmenovanou listUzivatelu. V Properties komponenty JList se přepneme do záložky Code a nastavíme Type Parameters na <Uzivatel>.

Dále přidáme:

  • JTextField - pro zadání jména nového uživatele,
  • JSpinner - pro zadání věku uživatele,
  • JTextField - pro zadání datumu registrace uživatele

Ke komponentám přidáme i patřičné popisné komponenty JLabel. Tyto prvky můžeme seskupit do panelu.

V dalším panelu budeme mít tři komponenty JLabel pro detail uživatele:

  • jmenoJLabel,
  • vekJLabel,
  • registrovanJLabel

Další tři komponenty JLabel přidáme jako jejich popisek.

Nakonec přidáme tlačítko pridatJButton k přidání uživatele. Výsledný formulář vypadá takto:

Formulář databáze uživatelů v CSV - Soubory v Javě

Metoda ulozitJButtonActionPerformed()

Z tlačítka Uložit odstraníme vytvoření testovacích uživatelů. Samotné uložení nyní vložíme do try-catch bloku. Jelikož naše databáze výjimky posílá pomocí throws dále, budeme na ně reagovat ve formulářové části. Po zachycení výjimky zobrazíme JOptionPane s chybou. Metoda tlačítka bude tedy vypadat takto:

private void ulozitJButtonActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        databaze.uloz();
    } catch (IOException ex) {
        JOptionPane.showMessageDialog(null, "Databázi se nepodařilo uložit, zkontrolujte přístupová práva k souboru.");
    }
}

Upozornění na chybu, tedy komunikace s uživatelem, přímo ve třídě Databaze by nebylo vhodné.

Metoda nacistJButtonActionPerformed()

Obdobně naklikneme metodu tlačítka Načíst:

private void nacistJbuttonActionPerformed(java.awt.event.ActionEvent evt) {
    try {
        databaze.nacti();
    } catch (IOException ex) {
        JOptionPane.showMessageDialog(null, "Databázi se nepodařilo načíst, soubor zřejmě neexisituje.");
    }
}

V reálné aplikaci by se načtení vykonalo asi automaticky po spuštění aplikace a uložení po ukončení. Pro názornost si to však ponecháme na tlačítkách.

Metoda listUzivateluValueChanged()

Nyní zpracujeme kliknutí na komponentu listUzivatelu, které provede zobrazení detailu uživatele do připravených labelů:

private void listUzivateluValueChanged(javax.swing.event.ListSelectionEvent evt) {
    Uzivatel uzivatel = listUzivatelu.getSelectedValue();
    if (uzivatel != null) {
        jmenoJLabel.setText(uzivatel.getJmeno());
        vekJLabel.setText(String.valueOf(uzivatel.getVek()));
        registrovanJLabel.setText(uzivatel.getRegistrovan().toString());
    }
}

Kód jsme opodmínkovali pro případ, že by nebyl žádný uživatel vybrán (list by byl prázdný).

Metoda pridatJButtonActionPerformed()

Posledním tlačítkem je tlačítko Přidat pro přidání nového uživatele:

private void pridatJButtonActionPerformed(java.awt.event.ActionEvent evt) {
    String jmeno = jmenoJTextField.getText().replace(";", " ");
    int vek = (int) vekJSpinner.getModel().getValue();
    LocalDate registrovan = LocalDate.parse(
            registrovanJTextField.getText(),
            DateTimeFormatter.ofPattern("d'.'M'.'y"));
    databaze.pridejUzivatele(jmeno, vek, registrovan);
}

Kdyby nám uživatel vložil do jména středník, aplikaci by nám rozbil. Proto voláme metodu replace(";", " "), která nám tyto středníky vymění za mezery.

Propojení databáze s kolekcí listUzivatelu

Nyní musíme databázi nabindovat na list uživatelů, aby se s každou změnou databáze aktualizoval. To uděláme tak, že v návrháři klikneme pravým tlačítkem na listUzivatelu, vybereme Customize code a řádek, kde se nastavuje model pomocí metody setModel() přepneme z default code na custom property a nyní jej můžeme upravit na:

listUzivatelu.setModel(databaze.getModel());
Nastavení modelu pro JList - Soubory v Javě

Testování

Zkusíme přidat nového uživatele:

Formulář databáze uživatelů v CSV - Soubory v Javě

Podobně bychom si mohli napsat i mazání uživatelů.

V následujícím cvičení, Řešené úlohy k 1.-5. lekci práce se soubory v Javě, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 160x (9.47 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Předchozí článek
Uložení objektů do CSV v Javě
Všechny články v sekci
Soubory v Javě
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 1.-5. lekci práce se soubory v Javě
Článek pro vás napsal Petr Štechmüller
Avatar
Uživatelské hodnocení:
24 hlasů
Autor se věnuje primárně programování v Javě, ale nebojí se ani webových technologií.
Aktivity