Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

6. diel - PRIPOMIENKOVÉ narodenín v JavaFX - Logická vrstva

V minulej lekcii, PRIPOMIENKOVÉ narodenín v JavaFX - Formuláre druhýkrát , sme navrhli formulár pre našu aplikáciu. V tomto tutoriále sa budeme zaoberať návrhom logické vrstvy, teda tried, ktoré obsahujú logiku aplikácie.

Dátum

Keďže práca s dátumom a časom je v Jave pomerne nepohodlná, pridajme si k projektu kratučkú statickú triedu, ktorá nám uľahčí prácu.

public class Datum {

    private static DateFormat formatData = new SimpleDateFormat("d.M.yyyy");

    public static void nastavPulnoc(Calendar datum)
    {
        datum.set(Calendar.HOUR_OF_DAY, 0);
        datum.set(Calendar.MINUTE, 0);
        datum.set(Calendar.SECOND, 0);
        datum.set(Calendar.MILLISECOND, 0);
    }

    public static String zformatuj(Calendar datum)
    {
        String datumText = formatData.format(datum.getTime());
        return datumText;
    }

    public static Calendar naparsuj(String datumText) throws ParseException
    {
        Calendar datum = Calendar.getInstance();
        datum.setTime(formatData.parse(datumText));
        return datum;
    }

}

Trieda obsahuje definíciu formátu dátumu. Ďalej vie určitý dátum nastaviť na polnoc (teda vynulovať čas a dátum ponechať). To sa nám veľmi hodí pri výpočtoch, pretože často budeme chcieť počítať s celými dňami a čas by nám mohol výpočty rohodit).

Ďalšie dve metódy prevádza medzi dátumom a jeho textovú podobou. Dátum môžeme načítať z textu (ako ho používateľ zadal) a alebo ho ako text napr. Vypísať.

Osoba

V našej aplikácii budú celkom iste figurovať osoby, triedu sme im už vytvorili. Poďme jej dodať implementáciu.

Vlastnosti

Osoba bude mať 2 vlastnosti: meno a narodeniny. Meno bude String, narodeniny budú typu Calendar. Obe vlastnosti implementujeme ako privátne atribúty a vygenerujeme k nim Getter:

public class Osoba
{
    private String jmeno;
    private Calendar narozeniny;

    public String getJmeno() {
        return jmeno;
    }

    public Calendar getNarozeniny() {
        return narozeniny;
    }

}

Metódy

Osoba bude mať niekoľko metód, teraz sa však obmedzme iba na jej konštruktor, aby sme našu aplikáciu čo najskôr dostali do spustiteľné podoby. Neskôr ju doplníme. Do triedy teda pridáme parametrický konštruktor.

Konštruktor

Okrem nastavenia vlastností inštancie bude mať konštruktor tiež za úlohu tieto vlastnosti zvalidovat. Ukážme si jeho kód:

public Osoba(String jmeno, Calendar narozeniny) throws IllegalArgumentException
{
    Datum.nastavPulnoc(narozeniny);
    if (jmeno.length() < 3)
        throw new IllegalArgumentException("Jméno je příliš krátké");
    if (narozeniny.after(Calendar.getInstance()))
        throw new IllegalArgumentException("Datum narození nesmí být v budoucnosti");

    this.jmeno = jmeno;
    this.narozeniny = narozeniny;
}

Najprv vynulujeme čas narodenín, aby nám nerobil pri výpočtoch problémy, pracovať budeme iba s celými dňami. Následne overíme, či nie je meno príliš krátke alebo či nie sú zadané narodeniny v budúcnosti. Ak niektorá zo situácií nastane, vyhodíme výnimku IllegalArgumen­tException a do jej konstruktoru vložíme správu pre používateľov.

Ak ste s výnimkami ešte nepracovali, vôbec to nevadí. Stačí vám vedieť, že je to spôsob, akým sa v objektových aplikáciách pracuje s chybami, najmä tými, ktoré sú spôsobené zadaním zlé hodnoty od užívateľa alebo ktoré vznikli pri práci so súbormi. Vyvolanie výnimky metódu okamžite ukončí. Ako na výnimku reagovať si ukážeme ďalej v seriáli. Výnimky budeme vždy vyhadzovať v logických triedach.

ToString

Keďže budeme osoby vypisovať, prepíšeme metódu toString () tak, aby vracala meno osoby:

@Override
public String toString()
{
    return jmeno;
}

Práve táto metóda je neskôr použitá ListView k výpisu jeho položiek.

Správca osôb

Posledné logickú komponentom aplikácia bude správca osôb. Trieda sa bude starať o osoby, bude ich vedieť pridávať, odoberať a ich zoznam ukladať do súboru a opätovne načítať. Konečne bude vedieť medzi osobami vyhľadať tú, ktorá má najbližšie narodeniny.

Pridajte si k projektu teda triedu SpravceOsob.

Atribúty

Jedinou vlastnosťou triedy je zoznam osôb. Zoznam je typu ObservableList. S touto kolekciou sme sa v seriáli už stretli. Vďaka tomu, že budeme mať osoby práve v tejto kolekcii, docielime automatického obnovenia všetkých komponentov na formulári, ktoré s touto kolekciou pracujú. Akonáhle teda napr. Pridáme novú osobu do ObservableListu, objaví sa aj v ListView. Tejto technike sa hovorí binding a už vieme, že nám ušetrí veľa práce s ručným obnovovaním formulára. K ObservableListu vygenerujeme getter:

Trieda zatiaľ vyzerá takto:

public class SpravceOsob {

    private ObservableList<Osoba> osoby = FXCollections.observableArrayList();

    public ObservableList<Osoba> getOsoby() {
        return osoby;
    }
}

Metódy

Opäť do triedy vložme zatiaľ len tie najdôležitejšie metódy.

Pridajme a odober

Metódy pre pridanie a odobratie osoby sú úplne triviálne:

public void pridej(Osoba osoba)
{
    osoby.add(osoba);
}

public void odeber(Osoba osoba)
{
    osoby.remove(osoba);
}

Základ logické vrstvy máme hotový. V budúcej lekcii, PRIPOMIENKOVÉ narodenín v JavaFX - Prepojenie vrstiev , si ukážeme, ako prepojiť logiku s formulárom a celú aplikáciu sprevádzkujeme.


 

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é 339x (10.42 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
PRIPOMIENKOVÉ narodenín v JavaFX - Formuláre druhýkrát
Všetky články v sekcii
Okenné aplikácie v Java FX
Preskočiť článok
(neodporúčame)
PRIPOMIENKOVÉ narodenín v JavaFX - Prepojenie vrstiev
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity