V předchozích článcích jsme si ukázali, jak správně sestavovat prvky pro výběr z nabídky a jak je správně kombinovat. Zatím jsme používali jen komponenty pro volbu z možností „vybráno“ nebo „nevybráno“ a také textové položky. Komponenta, o které si povíme dnes, je poměrně odlišná. Komponenta DateField se používá k zobrazení a editaci časového údaje a data.

Objekt DateField

Nejprve trochu teorie. Objekt DateField je potomkem třídy Item. Ti pozornější z vás už jistě tuší, co to v praxi znamená a jak mají správně tuto komponentu používat. Pro ty ostatní jen připomenu, že objekty, které jsou potomky abstraktní třídy Item, je nutno umístit na formulář (Form) metodou append().

Teď si povíme něco o vlastnostech a použití třídy DateField. Tato komponenta představuje editovatelný objekt, který zobrazuje datum a čas. S její pomocí lze jednoduše vytvářet aplikace, které budou sloužit k operacím s datem nebo časem, jako jsou například jednoduché organizéry času nebo aplikace pro přepočet aktuálního času mezi jednotlivými časovými pásmy. Je to vysokoúrovňová komponenta, jejíž vzhled a způsob ovládání závisí plně na implementaci Javy v mobilním telefonu. Zatímco například Motorola i85s nabídne hezký kalendář, Siemens SL45i nebo Nokia 7210 zobrazí jen editovatelný řádek rozdělený tečkami pro položky data a dvojtečkami pro časový údaj. Pokud po necháme objekt DateField bez nastavení, pak nám při zjištění hodnoty data vrátí „1.1.1970 0:00:00“ neboli „zero epoch“.

Datetime na telefonu Motorola i85s
DateField jako kalendář na telefonu Motorola i85s

Datetime na telefonu Siemens SL45i
DateField na telefonu Siemens SL45i jen jako editovatelný řádek.

Práce s komponentou DateField je velmi jednoduchá. Nejprve pomocí konstruktoru vytvoříme instanci třídy DateField. Konstruktor může mít dvě podoby:

DateField(String label, int mode);
// nebo
DateField(String label, int mode, TimeZone casove_pasmo);

První konstruktor pouze vytváří komponentu s popisem (label) a typem zobrazené hodnoty (mode). Pro typ zobrazované hodnoty je možno použít statické konstanty třídy DateField, a to následující : DateField.DATE, nebo hodnotu 1, DateField.TIME nebo hodnotu 2 a DateField.DATE_TIME nebo hodnotu 3.

Druhý konstruktor obsahuje ještě něco navíc. Je to tzv. TimeZone, neboli informace o aktuálním časovém pásmu. (Pokud chceme používat abstraktní třídu TimeZone je nutno naimportovat také balíček java.util.TimeZone.) Pokud tuto hodnotu v konstruktoru vynecháme, nastaví se automaticky na výchozí časové pásmo. To je časové pásmo, ve kterém je aplikace spuštěna. Volba výchozího časového pásma vypadá následovně:

DateField df = new DateField(„Datum a cas“, DateField.DATE_TIME, TimeZone.getDefault());

Pokud ovšem chceme nastavit například greenwichský čas (GMT), použijeme metodu getTimeZone(String ID);, která vrátí objekt TimeZone pro určené časové pásmo. Použití je opět prosté:

DateField df = new DateField(„Datum a cas“, DateField.DATE_TIME, TimeZone.getTimeZone(„GMT“));

Skupinu ID dostupných časových pásem můžeme lehce vypsat následujícím způsobem:

String ids[] = TimeZone.getAvailableIDs();
  for(int a=0;a<ids.length;a++) {
    System.out.println(ids[a]);
  }

Určitě vás bude také zajímat, jak vytvořit DateField a nastavit mu aktuální čas. Toto provedeme metodou setDate(Date);:

  df = new DateField(„Datum a cas“, DateField.DATE_TIME);
  df.setDate(new java.util.Date());

A zde už následuje jednoduchý příklad použití komponenty DateField:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Abc extends MIDlet implements CommandListener {
  Display disp;
  Form frm_date;
  Command cmd_exit;
  DateField df;
  public Abc() {
    cmd_exit = new Command(„Konec“, Command.SCREEN, 1);
    df = new DateField(„Kalendar“, 3);
    frm_date = new Form(„Datum a cas“);
    frm_date.append(df);
    frm_date.addCommand(cmd_exit);
  }
  public void startApp() {
    disp = Display.getDisplay(this);
    frm_date.setCommandListener(this);
    disp.setCurrent(frm_date);
  }
  public void pauseApp() { }
  public void destroyApp(boolean unconditional) {
    notifyDestroyed();
  }
  public void commandAction(Command c, Displayable d) {
      if(c == cmd_exit) {destroyApp(true); }
  }
}

Tento příklad vytvoří objekt DateField a umístí ho na formulář. Při otevření pak nabídne editaci jednotlivých položek podle zvoleného typu objektu. Buď datum, čas nebo obojí. Po editaci je možno časový údaj z objektu číst metodou getDate();, která vrací objekt Date s časovým údajem odpovídajícím typu vytvořeného objektu DateField.

Další zdroje

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

1 Příspěvěk v diskuzi

Odpovědět