Siirry pääsisältöön

MaskedDateField

Avaa ChatGPT:ssä
Shadow dwc-datefield 24.10
Java API

MaskedDateField on tekstinsyöttöohjain, joka on suunniteltu rakenteellista päivämäärän syöttöä varten. Se sallii käyttäjien syöttää päivämääriä numeroina ja automaattisesti muotoilee syötteen määritellyn maskin perusteella, kun kenttä menettää fokuksen. Maski on merkkijono, joka määrittää odotetun päivämäärämuodon, ohjaten sekä syötettä että näyttöä.

Tämä komponentti tukee joustavaa analysointia, vahvistamista, lokalisointia ja arvon palauttamista. Se on erityisen hyödyllinen lomakkeissa, kuten rekisteröinnissä, varauksissa ja aikataulutuksessa, joissa johdonmukaisia ja aluekohtaisia päivämäärämuotoja tarvitaan.

Etsitkö aikasyöttöä?

MaskedDateField keskittyy pelkästään päivämäärä arvoihin. Jos tarvitset samanlaista komponenttia aikojen syöttämiseen ja muotoiluun, tutustu sen sijaan MaskedTimeField.

Perusteet

MaskedDateField voidaan instanssia joko parametrien kanssa tai ilman. Voit määrittää alkusarjan, etiketti, paikkamerkin ja tapahtumakuuntelijan arvojen muutoksille.

Näytä koodi

Maskisäännöt

MaskedDateField tukee useita eri päivämäärämuotoja ympäri maailmaa, jotka vaihtelevat päivämäärän, kuukauden ja vuoden järjestyksen mukaan. Yleisiä kaavoja ovat:

  • Päivä/Kuukausi/Vuosi (käytetään suurimmassa osassa Eurooppaa)
  • Kuukausi/Päivä/Vuosi (käytetään Yhdysvalloissa)
  • Vuosi/Kuukausi/Päivä (käytetään Kiinassa, Japanissa ja Koreassa; myös ISO-standardi: YYYY-MM-DD)

Näiden muotojen sisällä paikalliset vaihtelut sisältävät erottimen valinnan (esim. -, / tai .), ovatko vuodet kahden vai neljän numeron pituisia, ja ovatko yksinumeroiset kuukaudet tai päivät täytetty etulukuilla.

Käsitelläkseen tätä moninaisuutta MaskedDateField käyttää muotoilun indikaattoreita, joista jokainen alkaa %, jota seuraa kirjain, joka edustaa tiettyä osaa päivämäärästä. Nämä indikaattorit määrittävät, kuinka syöte analysoidaan ja miten päivämäärä näytetään.

Päivämäärämuotoilun indikaattorit

MuotoKuvaus
%YVuosi
%MKuukausi
%DPäivä

Muokkaimet

Muokkaimet antavat enemmän kontrollia päivämäärän osien muotoiluun:

MuokkainKuvaus
zNollatäyttö
sLyhyt tekstiesitys
lPitkä tekstiesitys
pPakattu numero
dDesimaali (oletusmuoto)

Nämä voidaan yhdistää luomaan monenlaisia päivämäärämaskeja.

Päivämäärämuotojen lokalisointi

MaskedDateField mukautuu alueellisiin päivämäärämuotoihin asettamalla oikean paikallisuuden. Tämä varmistaa, että päivämäärät näkyvät ja analysoidaan tavalla, joka vastaa käyttäjän odotuksia.

AlueMuotoEsimerkki
YhdysvallatMM/DD/YYYY07/04/2023
EurooppaDD/MM/YYYY04/07/2023
ISO-standardiYYYY-MM-DD2023-07-04

Jotta voisit käyttää lokalisointia, käytä setLocale()-metodia. Se hyväksyy java.util.Locale ja säätää automaattisesti sekä muotoilun että analyysin:

dateField.setLocale(Locale.FRANCE);

Analysointilogiikka

MaskedDateField analysoi käyttäjän syötteen määritetyn päivämäärämaskin perusteella. Se hyväksyy sekä täydelliset että lyhennetyt numeeriset syötteet, joilla on tai ei ole erotinta, mahdollistamalla joustavan syötteen samalla varmistaen voimassa olevat päivämäärät. Analysointikäyttäytyminen riippuu maskin määrittelemästä muotojärjestyksestä (esim. %Mz/%Dz/%Yz kuukaudelle/päivälle/vuodelle). Tämä muoto määrittää, miten numeeriset sekvenssit tulkitaan.

Esimerkiksi, olettaen, että tänään on 15. syyskuuta 2012, näin erilaiset syötteet tulkitaan:

Esimerkit analysointitapauksista

SyöteYMD (ISO)MDY (Yhdysvallat)DMY (Eurooppa)
1
Yksi numero tulkitaan aina päivän numerona nykyisessä kuussa, joten tämä olisi 1. syyskuuta 2012.Sama kuin YMDSama kuin YMD
12
Kaksi numeroa tulkitaan aina päivän numerona nykyisessä kuussa, joten tämä olisi 12. syyskuuta 2012.Sama kuin YMDSama kuin YMD
112
Kolme numeroa tulkitaan 1-numeroisena kuukausinumerona, jota seuraa 2-numeroisen päivän numero, joten tämä olisi 12. tammikuuta 2012.Sama kuin YMDKolme numeroa tulkitaan 1-numeroisena päivän numerona, jota seuraa 2-numeroisen kuukausinumeron, joten tämä olisi 1. joulukuuta 2012.
1004
Neljä numeroa tulkitaan MMDD-muotoisena, joten tämä olisi 4. lokakuuta 2012.Sama kuin YMDNeljä numeroa tulkitaan DDMM-muotoisena, joten tämä olisi 10. huhtikuuta 2012.
020304
Kuusi numeroa tulkitaan YYMMDD-muotoisena, joten tämä olisi 4. maaliskuuta 2002.Kuusi numeroa tulkitaan MMDDYY-muotoisena, joten tämä olisi 3. helmikuuta 2004.Kuusi numeroa tulkitaan DDMMYY-muotoisena, joten tämä olisi 2. maaliskuuta 2004.
8 numeroa
Kahdeksan numeroa tulkitaan YYYYMMDD-muotoisena. Esimerkiksi 20040612 on 12. kesäkuuta 2004.Kahdeksan numeroa tulkitaan MMDDYYYY-muotoisena. Esimerkiksi 06122004 on 12. kesäkuuta 2004.Kahdeksan numeroa tulkitaan DDMMYYYY-muotoisena. Esimerkiksi 06122004 on 6. joulukuuta 2004.
12/6
Kaksi numeroa, jotka on erotettu millä tahansa voimassa olevalla erotinmerkillä, tulkitaan MM/DD-muotoiseksi, joten tämä olisi 6. joulukuuta 2012.
Huom: Kaikki merkit, paitsi kirjaimet ja numerot, katsotaan voimassa oleviksi erottimiksi.
Sama kuin YMDKaksi numeroa, jotka on erotettu millä tahansa erottimella, tulkitaan DD/MM-muotoiseksi, joten tämä olisi 12. kesäkuuta 2012.
3/4/5
5. huhtikuuta 20124. maaliskuuta 20053. huhtikuuta 2005

Tekstuaalinen päivämäärän analysointi 25.11

Oletusarvoisesti MaskedDateField hyväksyy vain numeerista syötettä päivämäärille. Voit kuitenkin ottaa käyttöön tekstuaalisen päivämäärän analysoinnin salliaksesi käyttäjien syöttää kuukausi- ja päivännimiä syötteessä. Tämä ominaisuus on erityisen hyödyllinen luotaessa luonnollisempaa päivämäärän syöttöä.

Ottaaksesi tekstuaalisen analysoinnin käyttöön, käytä setTextualDateParsing()-metodia:

dateField.setTextualDateParsing(true);

Kuukausinimen korvauksen

Kun tekstuaalinen analysointi on käytössä, voit käyttää erityisiä muokkaimia maskissasi hyväksyäksesi kuukausinimiä numeeristen arvojen sijaan:

  • %Ms - Hyväksyy lyhyet kuukausinimet (Tam, Hel, Maa jne.)
  • %Ml - Hyväksyy pitkät kuukausinimet (Tammikuu, Helmikuu, Maaliskuu jne.)

Kuukausinimet voivat esiintyä missä tahansa paikassa maskissa, ja kenttä hyväksyy silti numeerista syötettä varmuuden vuoksi.

Esimerkit

MaskiSyöteTulos
%Ms/%Dz/%YzSep/01/25Voimassa - Analysoidaan syyskuun 1, 2025
%Ml/%Dz/%YzSeptember/01/25Voimassa - Analysoidaan syyskuun 1, 2025
%Dz/%Ml/%Yz01/September/25Voimassa - Analysoidaan syyskuun 1, 2025
%Mz/%Dz/%Yz09/01/25Voimassa - Numeroidun varmuuden käyttö toimii edelleen
tiedot

Kaikki 12 kuukautta ovat tuettuja sekä lyhyissä (Tam, Hel, Maa, Huhti, Touko, Kesä, Heinä, Elo, Syys, Loka, Marras, Joulu) että pitkissä (Tammikuu, Helmikuu jne.) muodoissa.

Päivänimen koristelu

Viikonpäivän nimet voidaan sisällyttää syötteeseen paremman luettavuuden vuoksi, mutta ne ovat koristeellisia vain ja poistetaan analysoinnin aikana. Ne eivät vaikuta todelliseen päivämääräarvoon.

  • %Ds - Hyväksyy lyhyet päivän nimet (Ma, Ti, Ke jne.)
  • %Dl - Hyväksyy pitkät päivän nimet (Maanantai, Tiistai, Keskiviikko jne.)
Päivän nimet vaativat numeerisen päivän

Kun käytetään viikonpäivän nimiä (%Ds tai %Dl), maskissa on myös oltava %Dz tai %Dd, jotta voidaan määrittää todellinen päivän numero. Ilman numeerista päivän osaa syöte on voimassa oleva.

Esimerkit

MaskiSyöteTulos
%Ds %Mz/%Dz/%YzMa 09/01/25Voimassa - Päivänimi on koristeellinen
%Dl %Mz/%Dz/%YzMaanantai 09/01/25Voimassa - Päivänimi on koristeellinen
%Mz/%Dz/%Yz %Ds09/01/25 TiVoimassa - Päivänimi lopussa
%Dl/%Mz/%YzMaanantai/09/25Voimaton - Puuttuu %Dz
%Mz/%Dl/%Yz09/Maanantai/25Voimaton - Puuttuu %Dz

Kaikki 7 viikonpäivää ovat tuettuja sekä lyhyissä (Ma, Ti, Ke, To, Pe, La, Su) että pitkissä (Maanantai, Tiistai jne.) muodoissa.

Lisäanalysointisäännöt

Tekstuaalinen päivämäärän analysointi sisältää useita hyödyllisiä ominaisuuksia:

  • Kokonaistajuisesti: Syötteet kuten MAANANTAI 09/01/25, maanantai 09/01/25, tai Maanantai 09/01/25 toimivat kaikki samalla tavalla.
  • Paikallisesta huomiota: Kuukauden ja päivän nimet on sovitettava kentän määritettyyn paikallisuuteen. Esimerkiksi, ranskalaisessa paikallisuudessa käytetään septembre ei September. Englanninkielisiä nimiä ei tunnisteta, ellei paikallisuus ole asetettu englanniksi.
    • Ranskalainen paikallisuus: septembre/01/25 tunnistetaan syyskuuna
    • Saksan paikallisuus: Montag 09/01/25 tunnistetaan maanantaina

Min/max-rajoitusten asettaminen

Voit rajoittaa sallitun päivämääräalueen MaskedDateField-komponentissa käyttämällä setMin() ja setMax()-metodeja:

dateField.setMin(LocalDate.of(2020, 1, 1));
dateField.setMax(LocalDate.of(2030, 12, 31));

Molemmat menetelmät hyväksyvät java.time.LocalDate tyyppisiä arvoja. Syöte, joka on määritellyn alueen ulkopuolella, katsotaan voimattomaksi.

Arvon palauttaminen

MaskedDateField sisältää palautustoiminnon, joka nollaa kentän arvon ennalta määritettyyn tai alkuperäiseen tilaan. Tämä on hyödyllistä käyttäjän syötteen palauttamisessa tai palauttamisessa oletuspäivämäärään.

dateField.setRestoreValue(LocalDate.of(2025, 1, 1));
dateField.restoreValue();

Tavat palauttaa arvo

  • Ohjelmallisesti kutsumalla restoreValue()
  • Näppäimistön kautta, painamalla ESC (tämä on oletuspalautusavain, ellei sitä ole ylivoimaisessa tapahtumakuuntelijassa)

Voit asettaa palautettavan arvon setRestoreValue(), joka antaa LocalDate instanssin.

Näytä koodi

Vahvistuskaavat

Voit soveltaa asiakaspuolen vahvistussääntöjä säännöllisiä lausekkeita käyttäen setPattern()-metodin avulla:

dateField.setPattern("^\\d{2}/\\d{2}/\\d{4}$");

Tämä kaava varmistaa, että vain arvot, jotka vastaavat muodollista MM/DD/YYYY (kaksi numeroa, viiva, kaksi numeroa, viiva, neljä numeroa) katsotaan voimassa oleviksi.

Säännöllisen lausekkeen muoto

Kaavan on noudatettava JavaScript RegExp -syntaksia, kuten on dokumentoitu tässä.

Huomautuksia syötteen käsittelystä

Kenttä yrittää analysoida ja muotoilla numeerisia päivämääräsyötteitä nykyisen maskin perusteella. Käyttäjät voivat kuitenkin silti syöttää manuaalisesti arvoja, jotka eivät vastaa odotettua muotoa. Jos syöte on syntaktisesti voimassa, mutta semanttisesti virheellinen tai analysoimaton (esim. 99/99/9999), se voi läpäistä kaavion tarkastukset, mutta epäonnistua loogisessa vahvistamisessa. Sinun tulisi aina validoida syötearvo sovelluksen logiikassasi, vaikka säännöllinen lausekekaava olisi asetettu, varmistamaan, että päivämäärä on sekä oikein muotoiltu että merkityksellinen.

Päivämäärävalitsin

MaskedDateField sisältää sisäänrakennetun kalenterivalitsimen, jonka avulla käyttäjät voivat valita päivämäärän visuaalisesti sen sijaan, että kirjoittaisivat sen. Tämä parantaa käytettävyyttä vähemmän teknisille käyttäjille tai kun tarkka syöttö on tarpeen.

Näytä koodi

Pääsy valitsimeen

Voit käyttää päivämäärävalitsinta käyttämällä getPicker():

DatePicker picker = dateField.getPicker();

Valitsimen ikonin näyttäminen/piilottaminen

Käytä setIconVisible() näyttääksesi tai piilottaaksesi kalenterikuvakkeen kentän vieressä:

picker.setIconVisible(true); // näyttää kuvakkeen

Automaattinen avautuminen

Voit määrittää valitsimen avautuvaksi automaattisesti, kun käyttäjä vuorovaikuttaa kentän kanssa (esim. napsauttaa, painaa Enter tai nuolinäppäimiä):

picker.setAutoOpen(true);
Valinnan pakottaminen valitsimen kautta

Varmista, että käyttäjät voivat valita päivämäärän vain kalenterivalitsimen avulla (eivätkä kirjoita sitä manuaalisesti), yhdistämällä seuraavat kaksi asetusta:

dateField.getPicker().setAutoOpen(true); // avaa valitsimen käyttäjän vuorovaikutuksessa
dateField.setAllowCustomValue(false); // estää manuaalisen tekstisyötteen

Tämä asetus takaa, että kaikki päivämääräsyöte tulee valitsimen käyttöliittymästä, mikä on hyödyllistä, kun halutaan tiukkaa muotoilua ja poistaa kirjoitetun syötteen analysoinnista aiheutuvat ongelmat.

Avaa kalenteri manuaalisesti

Avaa kalenteri ohjelmallisesti:

picker.open();

Tai käytä aliasia:

picker.show(); // sama kuin open()

Näytä viikot kalenterissa

Valitsin voi valinnaisesti näyttää viikkonumerot kalenterinäkymässä:

picker.setShowWeeks(true);

MaskedDateFieldSpinner

MaskedDateFieldSpinner laajentaa MaskedDateField lisäämällä pyöräytysohjaimia, jotka sallivat käyttäjien suurentaa tai pienentää päivämäärää nuolinäppäimillä tai käyttöpainikkeilla. Se tarjoaa opastetumman vuorovaikutustyylin, joka on erityisen hyödyllinen työpöytätyylisissä sovelluksissa.

Näytä koodi

Keskeiset ominaisuudet

  • Vuorovaikutteinen päivämäärän säätö:
    Käytä nuolinäppimiä tai kääntöpainikkeita lisätäksesi tai vähentääksesi päivämääräarvoa.

  • Mukautettava säätöyksikkö:
    Valitse, mitä osaa päivämäärästä haluat muokata käyttämällä setSpinField():

spinner.setSpinField(MaskedDateFieldSpinner.SpinField.MONTH);

Vaihtoehdot sisältävät DAY, WEEK, MONTH ja YEAR.

  • Min/Max-rajoitukset:
    Perii tuen minimien ja maksimiarvojen asettamiseen setMin() ja setMax() avulla.

  • Muotoiltu ulostulo:
    Täydellinen yhteensopivuus maskien ja lokalisointiasetusten kanssa MaskedDateField:istä.

Esimerkki: Määritä viikoittainen säätö

MaskedDateFieldSpinner spinner = new MaskedDateFieldSpinner();
spinner.setSpinField(MaskedDateFieldSpinner.SpinField.WEEK);

Tämä saa jokaisen yliastutun vaiheen eteenpäin tai taaksepäin päivämäärää yhdellä viikolla.

Tyylittely

Loading...