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í.

Zadanie dátumu pomocou Kalendára v JavaFX

V minulej lekcii, Grafické hodiny v JavaFX - Návrh formulára , sme navrhli formulár pre analógové hodiny v JavaFX a pripravili si základ logickej triedy na vykreslenie ručičiek na Pane.

Poznámka na úvod: Podstatné meno dátum úmyselne skloňuje nespisovne podľa mužského vzoru, tj. Dátum, dátumu, dátumom, apod. Ide mi vylúčenie prípadnej zámeny so slovom dáta (v zmysle súbor dátových údajov).

Dátum je jeden z najdôležitejších dátových typov používaných pri vývoji a prevádzke aplikácie. Presné a príjemné zadanie posilňuje "positive user feeling".

Možností ako "pokaziť" dátum je celé rad - nesprávny oddeľovač, nesprávna hodnota dňa (závisí na hodnote mesiace - január má 31 dní, február 28 až 29 dní, marec 31 dní, ...), nesprávna hodnota mesiaca, 29. februára je len v priestupnom roku, atď.

Kalendár

Výhodnejšie je vybrať požadovaný dátum z grafického Kalendáre. To by užívateľovi uľahčilo zadávanie a spríjemnilo prácu. Ak by požadoval zadanie bez pomoci Kalendáre (napríklad účtovná, ktorá raketovým tempom "napcháva" aplikácii novými účtovnými dokladmi), tak bez problémov môže. Len nevyužije ponúkanú možnosť (kontrola na správnosť zadaného dátumu sa vykonáva vždy). Táto možnosť je dnes v aplikáciách veľmi často rozšírená. Ako tento nástroj zakomponovať do Java aplikácie?

Java má od verzie 8 novú triedu pre prácu dátumom: LOCALDATE (o novom API pre prácu s časom si môžete prečítať v tomto článku). Dobre s ňou spolupracuje trieda DataPicker (JavaFX UI Controls - Kalendár je v tejto triede implementovaný). Jej metóda getvalue () vracia užívateľom vybraný dátum typu LOCALDATE. Zodpovedá štandardu ISO-8601 (bez časovej zóny). Jedná sa vlastne o Gregoriánsky kalendár proleptický (definovaný aj pre dátumy pred jeho uvedením roka 1582).

Pre zobrazenie kalendára je nutné mať správne nastavený Locale - trieda pre nastavenie geografických, politických a kultúrnych špecifík regiónu. Nastavenie regiónu môže byť kritickú zložkou vývoja v prípade, že píšete aplikáciu pre medzinárodné prostredie (internationa­lization of application). Môže ísť napríklad o podnik, kde robotníci a stredné managent sú Česi. Vrcholový manažment sú Američené, Nemci, Francúzi, apod. Ani Číňania už nie sú výnimkou. V týchto prípadoch musíte byť schopní nastaviť aplikáciu tak, aby pre určitý okruh užívateľov pracovala v ich materinskom jazyku. Región sa nastavuje statickou metódou setdefault (newLocale). Regiónu zodpovedá vstupný parameter newLocale. Je možné ho zadať ako konštantu alebo LanguageTag

Konštanta

NetBeans Vám ich po stlačení Ctrl + Space ponúkne celý rad. Uvediem len pár príkladov:

Locale.setDefault (Locale.US); Okenné aplikácie v Java FX

Locale.setDefault (Locale.UK); Okenné aplikácie v Java FX

Locale.setDefault (Locale.PRC); Okenné aplikácie v Java FX
(People Republic China)

U nastavenie Locale.US si dovolím upozorniť na skutočnosť, že v prvý deň týždňa je Nedeľa a posledným Sobota. Druhou odlišnosťou oproti európskym kalendárom (napríklad Locale.UK) je postupnosť ktorou sa dátum číta. Na prvej pozícii je mesiac, náleduje deň a obedňajšiu je rok.

LanguageTag

Použitie jazykového tagu je nutné v prípade, keď požadovaný región nie je v okruhu bežne používaných konštánt, kam patrí aj Čeština. Zoznam všetkých LanguageTags môžete nájsť na oficiálnych webových stránkach

Ľahko zistíme náš LangugeTag: "cz-CS". Nastavenie češtiny je potom:

Locale.setDefault(Locale.forLanguageTag("cs-CZ"));

Výhodou LanguageTag je, že s ním môžeme nastaviť všetky mysliteľné regióny (napr. Aj Vietnam alebo Egypt):

Locale.setDefault (Locale.forLan­guageTag ( "vi-VN")); Okenné aplikácie v Java FX

Locale.setDefault (Locale.forLan­guageTag ( "ar-EG")); Okenné aplikácie v Java FX

Dosť rečí. Najlepšie učebnice programátora je komentovaný zdrojový kód. Uvediem tri príklady:

Príklad 1

Zadanie jedného dátumu cez DatePicker (obrázok 1) a jeho konverzia do reťazca prostredníctvom štyroch "formátovacie" (trieda DateTimeFormat­ter, viď obrázok 2). Kľúčová je trieda DatePicker. Ku sformátovanie použitej metódy format () - volá sa cez inštanciu triedy LOCALDATE. Nasledujúce 2 obrázky zobrazujú žiadané správanie programového kódu.

Okenné aplikácie v Java FX

Obrázok 1: Zadanie dátumu prostredníctvom Kalendáre

Jednotlivé formáty sa od seba líšia nasledovne. Praktická ukážka je na Obrázku 2

  1. Short: deň, mesiac: každý 1-2 pozície, rok má 2 pozície
  2. Medium: deň, mesiac: každý 1-2 pozície, rok má 4 pozície
  3. Long: navyše mesiac v písomnom tvare
  4. Full: navyše písomne vyjadrený dňa týždňa
Okenné aplikácie v Java FX

Obrázok 2: Zobrazenie zvoleného dátumu štyrmi formátovacích (short, medium, long, full)

Nižšie uvádzam dve kľúčové sekvencie z programového kódu. Celý zdrojový kód je k stiahnutiu pod článkom.

1. Príklady typu DatePicker a jeji inicializácia aktuálne dátumom:

private DatePicker zadavacDatumu = null;
zadavacDatumu = new DatePicker(LocalDate.now());

2. Formátovanie dátumov:

/** přeformátování do String přes metodu format()  */
String rtzFull, rtzLong, rtzMedium, rtzShort;
LocalDate zadaneDatum = zadavacDatumu.getValue();  // sejmutí hodnoty datumu
rtzFull = "FULL:"+zadaneDatum.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL));
rtzLong = "LONG:"+zadaneDatum.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));
rtzMedium = "MEDIUM:"+zadaneDatum.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM));
rtzShort = "SHORT:"+zadaneDatum.format(DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT));

Príklad 2

Zadanie časového obdobia a vypísanie jeho dĺžky na obrazovke (pozri Obrázok 3). Súčasťou zadania je aj stráženie postupnosti dátumov. Ide o to aby nebola zadaná záporná dĺžka trvania obdobia. Inými slovami: druhý dátum musí mať hodnotu po prvom dátumu (teda vyšší). Inicializačný dĺžka obdobia je týždeň (week, 7 dní).

Okenné aplikácie v Java FX

Obrázok 3: Úvodná obrazovka zadania dĺžky obdobia.

Užívateľ vyberá Začiatok obdobia a Koniec obdobia. Nastavuje tým dĺžku obdobia. Aplikácia stráži, aby užívateľ nemal možnosť zvoliť dátumy, ktoré by vytvorili "zápornú dĺžku trvania" obdobia. Nižšie sú uvedené obrázky znázorňujúce zakázané dátumy (sú podfarbené ružovo) pri výbere počiatočného a koncového dátumu.

Okenné aplikácie v Java FX Okenné aplikácie v Java FX

Obrázok 4. Vľavo: Zákaz dátumov pred 11.8.2015. Vpravo: Zákaz dátumov po 18.8.2015.

Vylúčenie niektorých dátumov zaisťujú inštancie dayCellFactory­Konec a dayCellFactory­Zacatek, ktoré využívajú interface Callback. Kľúčovými sú metódy:

setDisable (true) - "chráni" bunku dátumu pred zvolením od užívateľa setStyle ( "- fx-background-color: # ffc0cb;") - nastavuje ružové podfarbenie "disable" bunky dátumu

Metóda setDayCellFactory () prepája Príklady typu Callback (dayCellFacto­ryKonec, dayCellFactory­Zacatek) s inštanciami typu DatePicker (zadavacDatumu­Pocatek, zadavacDatumu­Konec). Jej vstupným parametrom je výskyt typu CallBack (dayCellFacto­ryKonec a dayCellFactory­Zacatek).

Príklad 3

Tento príklad je najjednoduchšie. Demonštruje, ako sa dá v kaledár zapnúť (vypnúť) zobrazenie čísla týždňa v roku. Túto vlastnosť možno nastaviť metódou setShowWeekNumbers (boolean). Metóda sa volá cez inštanciu triedy DatePicker. V našom prípade:

zadavacDatumu = new DatePicker(LocalDate.now());
zadavacDatumu.setShowWeekNumbers(false); // vypnutí zobrazování čísla týdne
zadavacDatumu.setShowWeekNumbers(true); // zapnutí zobrazování čísla týdne

Kalendár pri zapnutom zobrazovaní potom vyzerá nasledovne (čísla týždňov sú v prvom stĺpci modro):

Okenné aplikácie v Java FX

Obrázok 5: Kalendár so zapnutým zobrazovaním čísla týždňa

V článku som využil informácie z dokumentácie pre Java 8.

V budúcej lekcii, Grafické hodiny v JavaFX - Obsluha formulára , dokončíme aplikáciu Grafických hodín. Pridáme digitálnu a kombinovanú formu hodín a naučíme sa medzi nimi prepínať pomocou formulára.


 

Stiahnuť

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

Stiahnuté 125x (329.32 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Grafické hodiny v JavaFX - Návrh formulára
Všetky články v sekcii
Okenné aplikácie v Java FX
Preskočiť článok
(neodporúčame)
Grafické hodiny v JavaFX - Obsluha formulára
Článok pre vás napísal roman64
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
autor se věnuje vývoji webových aplikací: html, typescript, java spring, sql
Aktivity