Interval.cz
J2ME v p°φkladech - vybφrßme si podruhΘ

Obsahem p°edchozφho Φlßnku byl ·vod do pou₧φvßnφ komponent pro v²b∞r ze seznamu prvk∙. Ukßzali jsme si, jak pou₧φvat t°φdu List, pomocφ kterΘ se dajφ tvo°it seznamy polo₧ek k v²b∞ru. Tφmto zp∙sobem se ale dß na displej umφstit jen jeden seznam. V tomto Φlßnku si vysv∞tlφme, jak funguje t°φda ChoiceGroup, pomocφ kterΘ m∙₧eme na displej umφstit vφce skupin r∙zn²ch typ∙.

T°φda ChoiceGroup

T°φda ChoiceGroup je potomkem t°φdy Item, co₧ urΦuje zp∙sob jejφho pou₧itφ. Zatφmco seznam typu List je mo₧nΘ umφstit na displej samostatn∞, ChoiceGroup je nutno umφstit na takzvan² formulß° (Form). Prßv∞ umφst∞nφ na formulß° nßm umo₧nφ zobrazit vφce skupin r∙zn²ch typ∙ najednou.

Skupiny prvk∙ vklßdßme do formulß°e metodou append() - zobrazujφ se v po°adφ, ve kterΘm jsme je vlo₧ili. Tφm m∙₧eme sami urΦit po°adφ prvk∙ na naÜem formulß°i a tak zajistit jeho p°ehlednost. SamotnΘ skupiny prvk∙ jsou oznaΦeny nadpisem, stejn∞ jako seznam polo₧ek List. Tyto nadpisy umo₧≥ujφ d∞lenφ formulß°e na logickΘ prvky a napomßhajφ u₧ivateli midletu v orientaci po Φasto rozsßhlΘm seznamu prvk∙.

Po zobrazenφ formulß°e je kurzor umφst∞n na prvnφm prvku prvnφ skupiny. P°i posunu se p°emis¥uje na nejbli₧Üφ prvek v po₧adovanΘm sm∞ru. Pokud se ocitne na konci jednΘ skupiny prvk∙, pokraΦuje p°emφst∞nφm na nejbli₧Üφ prvek dalÜφ skupiny. P°i v²b∞ru prvku ze skupiny je tento prvek bu∩ vybrßn jako jeden z n∞kolika, nebo oznaΦenφm p°idßn do skupiny, to zßle₧φ na typu skupiny prvk∙ (EXCLUSIVE, MULTIPLE). To ale nejlΘpe sami uvidφte na dneÜnφm p°φkladu.

Pro vytvo°enφ instance t°φdy ChoiceGroup m∙₧eme pou₧φt dva typy konstruktoru. Prvnφ pouze vytvo°φ prßzdnou skupinu prvk∙:

ChoiceGroup cg_skupina = new ChoiceGroup(String nadpis, int typ v²b∞ru);

Nadpis je °et∞zec, kter² popisuje skupinu. Typ v²b∞ru je celΘ Φφslo udßvajφcφ mo₧nosti v²b∞ru EXCLUSIVE nebo MULTIPLE (IMPLICIT skupina prvk∙ nepovoluje). Mφsto Φφsla je mo₧no pou₧φt statickΘ hodnoty rozhranφ Choice - Choice.EXCLUSIVE pro hodnotu "1" nebo Choice.MULTIPLE pro hodnotu "2". Do tΘto skupiny pak m∙₧eme pomocφ metody append(String popis, Image ikona); vklßdat polo₧ky.

Pokud chceme vytvo°it skupinu prvk∙, kterß u₧ obsahuje polo₧ky, zvolφme nßsledujφcφ konstruktor:

ChoiceGroup cg_skupina = new ChoiceGroup(String nadpis, int typ v²b∞ru, String[] polo₧ky, Image[] ikony);

Pole polo₧ky obsahuje °et∞zce, kterΘ popisujφ jednotlivΘ polo₧ky, pole s obrßzky ikony obsahuje pole obrßzk∙, pat°φcφ k jednotliv²m polo₧kßm. Pole pou₧itß v konstruktoru zastupujφ metodu append(String popis, Image ikona); a plnφ skupinu prvk∙ stejn²m zp∙sobem.

Nynφ u₧ se podφvßme na zdrojov² k≤d dneÜnφho p°φkladu:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Abc extends MIDlet implements CommandListener {

  Display disp;

  ChoiceGroup cg_barva;
  ChoiceGroup cg_vybava;

  Command cmd_exit;
  Command cmd_next;

  Form frm_volba;
  Form frm_vysledek;

  StringItem si_barva;
  StringItem si_vybava;

  public Abc() {

    /* Zde vytvo°φme skupinu pro v²b∞r prvku typu EXCLUSIVE
    * co₧ znamenß ₧e z tΘto skupiny je mo₧no vybrat pouze
    * jeden prvek, to znßme z minulΘho dφlu.
    */

    cg_barva = new ChoiceGroup("Barva", Choice.EXCLUSIVE);
    cg_barva.append("Modra", null);
    cg_barva.append("Cervena", null);

    /* Zde je podobnß skupina, liÜφ se jen typem kter²
    * urΦuje mo₧nost v²b∞ru libovolnΘho poΦtu polo₧ek.
    */

    cg_vybava = new ChoiceGroup("Vybava", Choice.MULTIPLE);
    cg_vybava.append("Klimatizace", null);
    cg_vybava.append("Airbag", null);
    cg_vybava.append("Autoradio", null);
    cg_vybava.append("ABS", null);

    cmd_next = new Command("Dalsi", Command.SCREEN, 1);
    cmd_exit = new Command("Konec", Command.SCREEN, 1);

    /*Vytvo°φme textovΘ polo₧ky do kter²ch zapφÜeme v²sledky
    * v²b∞ru. Umφstφme je na formulß° frm_vysledek.
    */

    si_barva = new StringItem("Barva", "");
    si_vybava = new StringItem("Vybava", "");

    /* Formulß° pro volbu barvy a v²bavy. Na n∞j umφstφme
    * skupiny cg_barva a cg_vybava, zobrazeny budou
    * v po°adφ v jakΘm jsme je na formulß° umφstili.
    */

    frm_volba = new Form("Volba");
    frm_volba.append(cg_barva);
    frm_volba.append(cg_vybava);
    frm_volba.addCommand(cmd_next);
    frm_volba.addCommand(cmd_exit);

    /* Formulß° pro zobrazenφ v²sledku, obsahuje jen
    * dv∞ textovΘ polo₧ky si_barva a si_vybava.
    */

    frm_vysledek = new Form("Vybrano");
    frm_vysledek.append(si_barva);
    frm_vysledek.append(si_vybava);
    frm_vysledek.addCommand(cmd_exit);

  }

  public void startApp() {

    disp = Display.getDisplay(this);
    frm_volba.setCommandListener(this);
    disp.setCurrent(frm_volba);
  }

  public void pauseApp() { }

  public void destroyApp(boolean unconditional) {
    notifyDestroyed();
  }

  public void commandAction(Command c, Displayable d) {
    if(c == cmd_exit) { notifyDestroyed(); }
    if(c == cmd_next) { proceed(); }
  }

  public void proceed() {

    /* Nejprve kombinacφ metody pro zjiÜt∞nφ vybranΘ polo₧ky getSelectedIndex()
    * a metody pro zφskßnφ popisu polo₧ky getString(int polo₧ka) zφskßme popis
    * vybranΘ polo₧ky a nastavφme ji jako obsah textovΘ polo₧ky si_barva.
    */

    si_barva.setText(cg_barva.getString(cg_barva.getSelectedIndex()));

    /* potom projdeme vÜechny prvky skupiny cg_vybava a pokud najdeme
    * oznaΦen² prvek, tak jeho popis p°idßme do seznamu zvolenΘ v²bavy.
    * Nejprve zjistφme velikost skupiny prvk∙ cg_vybava.
    */

    int prvky = cg_vybava.size();
    String vybava = "";

    /* V cyklu projdeme cel² seznam.
    */

    for(int a=0; a<prvky; a++) {
      if(cg_vybava.isSelected(a)) {
        // pokud je prvek vybran², p°idß se jeho popis k seznamu
        vybava = vybava + cg_vybava.getString(a) + " ";
      }
    }

    /* A zφskan² seznam vlo₧φme do textovΘ polo₧ky si_vybava.
    */

    si_vybava.setText(vybava);

    frm_vysledek.setCommandListener(this);
    disp.setCurrent(frm_vysledek);
  }
}

Midlet po spuÜt∞nφ zobrazφ formulß°, kter² obsahuje dv∞ skupiny polo₧ek pro v²b∞r - barvu a v²bavu vozu. Po zvolenφ jednΘ z barev, libovolnΘho poΦtu prvk∙ z v²bavy a zvolenφ p°φkazu DalÜφ, zobrazφ dalÜφ formulß°. Ten obsahuje dv∞ textovΘ polo₧ky (StringItem), kterΘ obsahujφ popis vybran²ch polo₧ek. SpuÜt∞n² midlet vypadß nßsledovn∞:

Nokia 7210, ChoiceGroup
ChoiceGroup na mobilnφm telefonu Nokia 7210...
Motorola T720i, ChoiceGroup
...na mobilnφm telefonu Motorola T720i...
Siemens S55, ChoiceGroup
...na mobilnφm telefonu Siemens S55...
Siemens SL45i, ChoiceGroup
...a na mobilnφm telefonu Siemens SL45i.

Po v²b∞ru polo₧ek a volb∞ p°φkazu DalÜφ, midlet zavolß metodu proceed(). Ta projde prvky obou skupin cg_barva a cg_vybava, jejich obsah ulo₧φ do textov²ch polo₧ek si_barva a si_vybava a nßsledn∞ zobrazφ dalÜφ formulß°. Jak to vypadß, m∙₧eme vid∞t na nßsledujφcφch obrßzcφch:

Nokia 7210, ChoiceGroup
V²sledek volby na mobilnφm telefonu Nokia 7210...
Motorola T720i, ChoiceGroup
...na mobilnφm telefonu Motorola T720i...
Siemens S55, ChoiceGroup
...na mobilnφm telefonu Siemens S55...
Siemens SL45i, ChoiceGroup
...a na mobilnφm telefonu Siemens SL45i.

Jak sami vidφte, je pou₧φvßnφ t°φdy ChoiceGroup velmi podobnΘ pou₧itφ t°φdy List. Pomocφ tΘto komponenty se dajφ vytvß°et prakticky libovolnΘ seznamy polo₧ek pro v²b∞r, formulß°e jsou trochu podobnΘ formulß°∙m, kterΘ znßme z www strßnek.

Skupiny pro v²b∞r prvk∙ Choicegroup lze mimo jinΘ takΘ kombinovat s prvkem pro vklßdßnφ textu TextField. Ukßzky jeho pou₧itφ jsme probrali v Φlßnku o u₧ivatelsk²ch vstupech. TextovΘ pole se vklßdß na formulß° stejn∞ jako skupiny prvk∙ metodou append(). P°φklad pou₧itφ tohoto prvku mohou aktivn∞jÜφ Φtenß°i zpracovat jako domßcφ ·lohu.



Petr Kova°φk (9.5. 2003)
programßtor spoleΦnosti Delta E.S.


Redakce Interval.cz |  Inzerce na Interval.cz |  Hledßme novΘ autory ISSN 1212-8651 
 ⌐ Zoner software, s.r.o., vÜechna prßva vyhrazena, tento server dodr₧uje prßvnφ p°edpisy o ochran∞ osobnφch ·daj∙.