Siirry pääsisältöön

MaskedDateField

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

MaskedDateField on tekstikenttä, joka mahdollistaa käyttäjien syöttää päivämääriä numeroina ja muuntaa syötteen automaattisesti määritellyn maskin mukaan, kun kenttä menettää keskittyksensä. Maski määrittää odotettavan päivämäärämuodon, opastaa sekä syötteessä että näytössä. Komponentti tukee joustavaa jäsennystä, validointia, lokalisointia ja arvon palauttamista johdonmukaisen, aluekohtaisen päivämääräkäytön varmistamiseksi.

Etsitkö aikasyötettä?

MaskedDateField keskittyy vain päivämäärä arvoihin. Jos tarvitset samankaltaista komponenttia aikojen syöttämiseen ja muotoiluun, tutustu sen sijaan MaskedTimeField komponenttiin.

MaskedDateField voidaan instansioida parametreilla tai ilman. Voit määrittää alkusarjan, tunnisteen, paikkamerkin ja tapahtumakuuntelijan arvojen muutoksille.

Näytä koodi

Maskisäännöt​

MaskedDateField tukee useita ympäri maailmaa käytettäviä päivämääräformaatteja, jotka vaihtelevat päivämäärän, kuukauden ja vuoden järjestyksen mukaan. Yleisiä malleja 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 formaatien sisällä paikalliset variantit sisältävät erottimen valinnan (esim. -, /, tai .), ovatko vuodet kaksinumeroisia vai nelinumeroisia, ja ovatko yksinumeroiset kuukaudet tai päivät nollatut.

Käsitelläkseen tätä moninaisuutta, MaskedDateField käyttää formaatti-indikaattoreita, jotka alkavat %:llä, jota seuraa kirjain, joka edustaa tiettyä päivämäärän osaa. Nämä indikaattorit määrittävät, miten syöte jäsennetään ja miten päivämäärä näytetään.

Maskien soveltaminen ohjelmallisesti

Jotta voit muotoilla tai jäsentää päivämäriä saman maskin syntaksilla kentän ulkopuolella, käytä MaskDecorator apuluokkaa.

Päivämäärämuotoindikaattorit​

MuotoKuvaus
%YVuosi
%MKuukausi
%DPäivä

Muuttujat​

Muuttujat antavat enemmän hallintaa siihen, miten päivämäärän osat muotoillaan:

MuuttujaKuvaus
zNollaa täyttö
sLyhyt tekstiversio
lPitkä tekstiversio
pPakattu numero
dDesimaalimuoto (oletus)

Näitä voidaan yhdistää rakentamaan monenlaisia päivämäärämaskeja.

Päivämäärän muotoilun lokalisointi​

MaskedDateField mukautuu alueellisiin päivämääräformaatteihin asettamalla sopiva lokaali. Tämä varmistaa, että päivämäärät näytetään ja jäsennetään 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

Voit soveltaa lokalisointia käyttämällä setLocale() metodia. Se hyväksyy java.util.Locale ja säätää automaattisesti sekä muotoilua että jäsentämistä:

dateField.setLocale(Locale.FRANCE);

Jäsentämislogiikka​

MaskedDateField jäsentää 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 erottimilla tai ilman, mikä mahdollistaa joustavan syöttämisen samalla varmistaen voimassa olevat päivämäärät. Jäsentämiskäyttäytyminen riippuu maskin määrittämästä jä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, tällöin erilaisia syötteitä tulkitaan seuraavasti:

Esimerkit jäsentämisestä​

SyöteYMD (ISO)MDY (USA)DMY (EU)
1
Yksi numero tulkitaan aina päiväluvuksi nykyisessä kuussa, joten tämä olisi 1. syyskuuta 2012.Sama kuin YMDSama kuin YMD
12
Kaksi numeroa tulkitaan aina päiväluvuksi nykyisessä kuussa, joten tämä olisi 12. syyskuuta 2012.Sama kuin YMDSama kuin YMD
112
Kolme numeroa tulkitaan 1-numeroisena kuun numerona, jota seuraa 2-numeroiseksi päiväksi, joten tämä olisi 12. tammikuuta 2012.Sama kuin YMDKolme numeroa tulkitaan 1-numeroisena päiväluvuna, jota seuraa 2-numeroiseksi kuun numeroksi, joten tämä olisi 1. joulukuuta 2012.
1004
Neljä numeroa tulkitaan MMDD, joten tämä olisi 4. lokakuuta 2012.Sama kuin YMDNeljä numeroa tulkitaan DDMM, joten tämä olisi 10. huhtikuuta 2012.
020304
Kuusi numeroa tulkitaan YYMMDD, joten tämä olisi 4. maaliskuuta 2002.Kuusi numeroa tulkitaan MMDDYY, joten tämä olisi 3. helmikuuta 2004.Kuusi numeroa tulkitaan DDMMYY, joten tämä olisi 2. maaliskuuta 2004.
8 numeroa
Kahdeksan numeroa tulkitaan YYYYMMDD. Esimerkiksi, 20040612 on 12. kesäkuuta 2004.Kahdeksan numeroa tulkitaan MMDDYYYY. Esimerkiksi, 06122004 on 12. kesäkuuta 2004.Kahdeksan numeroa tulkitaan DDMMYYYY. Esimerkiksi, 06122004 on 6. joulukuuta 2004.
12/6
Kaksi numeroa, joita erottaa mikä tahansa voimassa oleva erottaja, tulkitaan MM/DD, joten tämä olisi 6. joulukuuta 2012.
Huom: Kaikki merkit, paitsi kirjaimet ja numerot, on hyväksyttyjä erottajia.
Sama kuin YMDKaksi numeroa, joita erottaa mikä tahansa erottaja, tulkitaan DD/MM, joten tämä olisi 12. kesäkuuta 2012.
3/4/5
5. huhtikuuta 20124. maaliskuuta 20053. huhtikuuta 2005

Tekstuaalinen päivämäärän jäsentäminen 25.11​

Oletuksena MaskedDateField hyväksyy vain numeerista syötettä päivämäärille. Voit kuitenkin mahdollistaa tekstuaalisen päivämäärän jäsentämisen salliaksesi käyttäjien syöttää kuukausi- ja päivämäärinimiä syötteissään. Tämä ominaisuus on erityisen hyödyllinen, kun halutaan luoda luonnollisempaa päivämääräsyöttöä.

Ottaaksesi käyttöön tekstuaalisen jäsentämisen, käytä setTextualDateParsing() metodia:

dateField.setTextualDateParsing(true);

Kuukauden nimen korvaukset​

Kun tekstuaalinen jäsentäminen on otettu käyttöön, voit käyttää erityisiä muuttujia maskissasi hyväksyäksesi kuukauden nimiä numeeristen arvojen sijaan:

  • %Ms - Hyväksyy lyhyet kuukausinimet (Tammi, Helmi, Maalis, jne.)
  • %Ml - Hyväksyy pitkät kuukausinimet (Tammikuu, Helmikuu, Maaliskuu, jne.)

Kuukauden nimet voivat esiintyä missä tahansa tavassa maskissa, ja kenttä hyväksyy silti numeerista syötettä varajärjestelmänä.

Esimerkit​

MaskiSyöteTulokset
%Ms/%Dz/%YzSep/01/25Voimassa - Jäsentää 1. syyskuuta 2025
%Ml/%Dz/%YzSeptember/01/25Voimassa - Jäsentää 1. syyskuuta 2025
%Dz/%Ml/%Yz01/September/25Voimassa - Jäsentää 1. syyskuuta 2025
%Mz/%Dz/%Yz09/01/25Voimassa - Numeerinen varajärjestelmä toimii vielä
tiedot

Kaikki 12 kuukautta ovat tuettuja sekä lyhyissä (Tammi, Helmi, Maalis, Huhti, Touko, Kesä, Heinä, Elo, Syys, Loka, Marras, Joulukuu) että pitkissä (Tammikuu, Helmikuu, jne.) muodoissa.

Päivän nimen koristelut​

Viikonpäivän nimet voidaan sisällyttää syötteeseen parempaa luettavuutta varten, mutta ne ovat koristeellisia vain ja ne poistetaan jäsentämisen yhteydessä. Ne eivät vaikuta itse päivämääräarvoon.

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

Kun käytät viikonpäivän nimiä (%Ds tai %Dl), maskisi on myös sisällyttävä %Dz tai %Dd määrittääkseen todellisen päivän numeron. Ilman numeerista päiväkohteen komponenttia syöte on kelpaamaton.

Esimerkit​

MaskiSyöteTulokset
%Ds %Mz/%Dz/%YzMa 09/01/25Voimassa - Päivän nimi on koristeellista
%Dl %Mz/%Dz/%YzMaanantai 09/01/25Voimassa - Päivän nimi on koristeellista
%Mz/%Dz/%Yz %Ds09/01/25 TiVoimassa - Päivän nimi lopussa
%Dl/%Mz/%YzMaanantai/09/25Kelpaamaton - Puuttuu %Dz
%Mz/%Dl/%Yz09/Maanantai/25Kelpaamaton - Puuttuu %Dz

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

Lisäjäsentämissäännöt​

Tekstuaalinen päivämäärän jäsentäminen sisältää useita hyödyllisiä ominaisuuksia:

  • Suurta ja pientä kirjainherkkä: Syöte kuten MAANANTAI 09/01/25, maanantai 09/01/25 tai Maanantai 09/01/25 kaikki toimivat samalla tavalla.
  • Paikallistietoinen: Kuukauden ja päivän nimet on oltava yhteensopivia kentän määritetyn lokaalin kanssa. Esimerkiksi, Ranskan lokaalissa, käytä septembre ei September. Englanninkielisiä nimiä ei tunnisteta, ellei lokaali ole asetettu englanniksi.
    • Ranskan lokaalilla: septembre/01/25 tunnistetaan syyskuuksi
    • Saksan lokaalilla: Montag 09/01/25 tunnistetaan maanantaina

Min/max-rajojen asettaminen​

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

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

Molemmat metodit hyväksyvät java.time.LocalDate tyypin arvoja. Määritetyn alueen ulkopuolella oleva syöte katsotaan kelpaamattomaksi.

Arvon palauttaminen​

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

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 tapahtumakuuntelijalla ole määritetty muuta)

Voit asettaa palautettavan arvon setRestoreValue() metodilla, joka ottaa vastaan LocalDate instanssin.

Näytä koodi

Validointimallit​

Voit soveltaa asiakaspään validointisääntöjä käyttäen säännöllisiä lausekkeita setPattern() metodilla:

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

Tämä malli varmistaa, että vain arvot, jotka vastaavat MM/DD/YYYY formaattia (kaksi numeroa, vinoviiva, kaksi numeroa, vinoviiva, neljä numeroa), katsotaan kelpaaviksi.

Säännöllisen lausekkeen muoto

Mallin on seurattava JavaScriptin RegExp-syntaksia, kuten on dokumentoitu tässä.

Huomiot syöte käsittelyssä

Kenttä yrittää jäsentää 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 synnällisesti oikein mutta merkityksellisesti virheellinen tai jäsentämätön (esim. 99/99/9999), se voi läpäistä mallintarkastukset mutta epäonnistua loogisessa validoinnissa. Sinun tulisi aina validoida syötearvo sovelluksesi logiikassa, vaikka säännöllinen lausekemalli olisi asetettu, varmistaaksesi, että päivämäärä on sekä oikein muotoiltu että merkityksellinen.

Päivämäärävalitsin​

MaskedDateField sisältää sisäänrakennetun kalenterivalitsimen, joka mahdollistaa käyttäjien valita päivämäärän visuaalisesti sen sijaan, että syöttäisivät sen. Tämä parantaa käytettävyyttä vähemmän teknisille käyttäjille tai kun tarkkaa syöttöä tarvitaan.

Näytä koodi

Pääsy valitsimeen​

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

DatePicker picker = dateField.getPicker();

Valitsimen kuvakkeen näyttäminen/piilottaminen​

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

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

Automaattinen avauskäyttäytyminen​

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

picker.setAutoOpen(true);
Varmista valinta valitsimen kautta

Jotta käyttäjät voivat valita päivämäärän vain käyttämällä kalenterivalitsinta (eivätkä kirjoittamalla itse), yhdistä seuraavat kaksi asetusta:

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

Tämä asetelma takaa, että kaikki päivämääräsyötteet tulevat valitsimen käyttöliittymän kautta, mikä on hyödyllistä, kun haluat tiukan muotoilun hallinnan ja välttää jäsentämisongelmia kirjoitettavasta syötteestä.

Avaa kalenteri manuaalisesti​

Avaaksesi kalenterin ohjelmallisesti:

picker.open();

Tai käytä aliasia:

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

Näytä viikot kalenterissa​

Valitsija voi valinnaisesti näyttää viikonnumeroita kalenterin näkymässä:

picker.setShowWeeks(true);

MaskedDateFieldSpinner​

MaskedDateFieldSpinner laajentaa MaskedDateField lisäämällä spinnerikontrollit, joiden avulla käyttäjät voivat lisätä tai vähentää päivämäärää nuolinäppäimillä tai käyttöliittymän painikkeilla. Se tarjoaa ohjatumpaa vuorovaikutustyyliä, joka on erityisen hyödyllinen työpöytätason sovelluksissa.

Näytä koodi

Keskeiset ominaisuudet​

  • Interaktiivinen päivämäärän säätäminen: Käytä nuolinäppäimiä tai kierrä-painikkeita päivämääräarvon lisäämiseen tai vähentämiseen.

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

    spinner.setSpinField(MaskedDateFieldSpinner.SpinField.MONTH);

    Vaihtoehtoja ovat DAY, WEEK, MONTH ja YEAR.

  • Min/Max-rajoitukset: Perii tuen minimien ja maksimaalisten sallituille päivämäärille käyttäen setMin() ja setMax().

  • Muotoiltu tuloste: Täysin yhteensopiva maskien ja lokalisointiasetusten kanssa MaskedDateField-komponentista.

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

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

Tämä saa aikaan, että jokainen kierräysaskel vie aikarajaa eteen- tai taaksepäin viikon verran.

Tyylittely​

Loading...