J2ME v příkladech – uživatelský vstup

8. dubna 2003

Obsahem předešlých článků byla tvorba úvodní obrazovky midletů a také tvorba nabídek neboli menu. V tomto článku se naučíme pracovat s uživatelskými daty, které jsou zadány v průběhu aplikace.

K čemu je to vlastně dobré?

Zpracování uživatelských dat je dnes již základním předpokladem všech aplikací. Mezi nejběžnější příklady patří používání e-mailových klientů nebo různých textových editorů. Komponenty pro zpracování uživatelských dat jsou samozřejmě i součástí aplikací pro mobilní telefony.

Možnosti mobilních aplikací

Mikroedice programovacího jazyka Java obsahuje dvě komponenty pro vkládání uživatelských dat. Jsou to komponenty TextBox a TextField. Komponenta TextBox je potomek třídy Screen a může být umístěn na displej samostatně, naproti tomu TextField je potomkem třídy Item a musí být umístěn na takzvaný formulář (Form). Formulář je komponenta, která může obsahovat libovolné položky – obrázky, text, textové pole nebo skupiny prvků pro výběr z nabídky (List). V následujícím příkladě si ukážeme, jak používat formulář ve spojení s textovými poli. Vytvoříme si formulář, který může sloužit jako přihlašovací formulář do aplikace, a ukážeme si možnosti třídy TextField.

Třída TextField má následující konstruktor:

TextField textove_pole = new TextField(String nadpis, String obsah, int velikost, omezeni);

Nadpis je textová položka, která je zobrazena nad textovým polem. Je to jen informativní popisek pro uživatele. Může obsahovat informaci o formátu dat, která mají být zadána do daného pole. Obsah je řetězec, který se zobrazí v textovém poli. Uživatel ho při editaci pole může buď upravit, nebo úplně smazat. Dá se využít jako pomůcka, například v poli pro e-mailovou adresu může být umístěn znak @ a uživatel ho tedy při vkládání e-mailové adresy nemusí hledat na klávesnici mobilního telefonu. Velikost je celé číslo vyjadřující maximální počet znaků, které může uživatel do textového pole vložit. Omezení určuje jaké vstupní údaje může uživatel vložit, parametry jsou následující:

  • TextField.ANY umožňuje vložit jakýkoliv řetězec. Tomuto „omezovači“ je přiřazena hodnota 0.
  • TextField.EMAILADDR umožňuje vložit e-mailovou adresu. Jeho hodnota je 1.
  • TextField.NUMERIC omezí vložené znaky pouze na čísla. Má hodnotu 2.
  • TextField.PHONENUMBER umožní vložení telefonního čísla. Jeho hodnota je 3.
  • TextField.URL je určen pro vkládání internetové adresy a má hodnotu 4.
  • TextField.PASSWORD zakryje vložené znaky hvězdičkami. Je určen pro vkládání hesla a jeho hodnota je 0x10000.

Za zmínku ještě stojí možnost kombinování omezovače TextField.PASSWORD s ostatními. Lze ho kombinovat pomocí operátoru OR. Chceme-li například vytvořit textové pole, které umožní vložit pouze čísla a navíc bude skryto před okolím, můžeme použít konstruktor TextField tf = new TextField("Cislo", "", 20, TextField.NUMERIC|TextField.PASSWORD);. Takto vytvořené textové pole umožní vložit pouze čísla a navíc vložené znaky nahradí hvězdičkami.

Teď už víme, jak vytvořit textové pole, které bude vyhovovat našim potřebám. Můžeme se tedy hned pustit do tvorby přihlašovacího formuláře. Ten bude obsahovat dvě textová pole, tlačítko pro přihlášení a vyhodnocení vložených údajů. Zdrojový kód je následující:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Abc extends MIDlet implements CommandListener {
  Display disp;
  Form frm_login; // vytvoření formuláře na kterém budou textová pole
  Form frm_result;
  TextField tf_login; // textové pole pro přihlašovací jméno
  TextField tf_pwd; // textové pole pro heslo
  Command cmd_login;
  Command cmd_konec;
  StringItem si_prihlaseni; // textová položka pro zobrazení výsledku přihlášení
  public Abc() {
    cmd_login = new Command(„Login“, Command.SCREEN, 1);
    cmd_konec = new Command(„Konec“, Command.SCREEN, 1);
    tf_login = new TextField(„Jmeno“, „“, 20, TextField.ANY); // pole pro jméno
    tf_pwd = new TextField(„Heslo“, „“, 20, TextField.PASSWORD); // pole pro heslo
    si_prihlaseni = new StringItem(„“, „“);
    frm_login = new Form(„Login“); // vytvoření přihlašovacího formuláře
    frm_login.append(tf_login);
    frm_login.append(tf_pwd);
    frm_login.addCommand(cmd_login);
    frm_login.addCommand(cmd_konec);
    frm_result = new Form(„Prihlaseni“);
  }
  public void startApp() {
    disp = Display.getDisplay(this);
    frm_login.setCommandListener(this);
    disp.setCurrent(frm_login);
  }
  public void pauseApp() { }
  public void destroyApp(boolean unconditional) {
    notifyDestroyed();
  }
  public void commandAction(Command c, Displayable d) {
    if(c == cmd_konec) { notifyDestroyed(); }
    if(c == cmd_login) { login(); }
  }
  public void login() {
    String jmeno = tf_login.getString(); // zjištění hodnoty textových polí a
    String heslo = tf_pwd.getString(); // zpracování jejich obsahu
    if(jmeno.equals(„jarda“) && heslo.equals(„patek“)) {
      prihlaseni(1);
    } else {
      prihlaseni(0);
    }
  }
  public void prihlaseni(int vysledek) {
    switch(vysledek) {
      case(1): // správné jméno i heslo
        si_prihlaseni.setText(„Prihlaseni je v poradku :o)“);
      break;
      case(0): // nesprávné jméno nebo heslo
        si_prihlaseni.setText(„Prihlaseni je neplatne !“);
      break;
    }
    frm_result.append(si_prihlaseni);
    frm_result.addCommand(cmd_konec);
    frm_result.setCommandListener(this);
    disp.setCurrent(frm_result);
  }
}

Nokia 6310
Midlet běžící na mobilním telefonu Nokia 6310i…

Siemens C55
…a zde na mobilním telefonu Siemens C55.

Midlet nejprve vytvoří textová pole, která následně umístí na formulář frm_login. Po stisku tlačítka LOGIN je provedena kontrola vložených údajů a podle výsledku kontroly je zavolána metoda prihlaseni() s parametrem 1 v případě platného přihlášení, nebo s parametrem 0 v případě špatně zadaných přihlašovacích údajů. Text z textového pole získáme metodou getString(). Zde je přehled několika užitečných metod pro práci s textovým polem:

  • getChars(char[] pole) vrátí obsah jako pole[] znaků indexované od nuly
  • getMaxSize() vrátí celé číslo, které určuje maximální velikost textu vloženého do textového pole
  • insert(String text, int misto) vloží do textového pole řetězec „text“ na pozici „misto“
  • setLabel(String nadpis) nastaví popisek textového pole na hodnotu „nadpis“
  • setString(String text) nastaví obsah textového pole na hodnotu „text“

Popis všech metod můžete získat v manuálu přiloženém k Wireless Toolkitu od firmy Sun. Jsou vesměs totožné s metodami pro komponentu TextBox, která se liší hlavně tím, že ji lze umístit na displej samostatně bez použití formuláře.

Užitečné zdroje

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

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

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *