| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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∙:
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:
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.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∞:
ChoiceGroup na mobilnφm telefonu Nokia 7210...
...na mobilnφm telefonu Motorola T720i...
...na mobilnφm telefonu Siemens S55...
...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:
V²sledek volby na mobilnφm telefonu Nokia 7210...
...na mobilnφm telefonu Motorola T720i...
...na mobilnφm telefonu Siemens S55...
...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.