Programovßnφ v jazyce Java - J2ME

Kurz programovßnφ v Jav∞ pro mobilnφ telefony - 3. dφl

 ┌vodem  |   Kurz programovßnφ v Jav∞  |  Kurz programovßnφ v Jav∞ pro mobilnφ telefony  |   Soubory ke sta₧enφ  |  Otßzky a odpov∞di

 

┌vod

Vφtejte u t°etφho dφlu kurzu programovßnφ pro mobilnφ telefony. V tomto dφle probereme grafickΘ u₧ivatelskΘ rozhranφ (GUI) a vytvo°φme program, ve kterΘm pou₧ijeme vÜechny v∞ci, kterΘ se nauΦφme.


GrafikcΘ u₧ivatelskΘ rozhranφ

Konfigurace CLDC, kterou vyu₧φvajφ mobilnφ telefony nedefinuje grafickΘ u₧ivatelskΘ prost°edφ. Z toho vypl²vß, ₧e GUI je specifikovßno a₧ v profilu MIDP.

Na poΦφtaΦφch se pro tvorbu GUI vyu₧φvajφ t°φdy balφku AWT a Swing, ale pro malΘ za°φzenφ, jako jsou mobilnφ telefony nejsou tyto t°φdy ·pln∞ idelßnφ, nap°φklad proto, ₧e tyto t°φdy bylo tvo°eny pro pou₧itφ na "normßlnφch" poΦφtaΦφch s velk²m displejem, kterΘ majφ klßvesnici a myÜ. U mobilnφch telefon∙ nic jako myÜ nenajdeme. Bylo by takΘ zbyteΦnΘ pou₧φvat tolik t°φd, kterΘ by zabφraly mnoho pam∞ti, kdy₧ by se stejn∞ nevyu₧ily. Proto vznikly vlastnφ t°φdy, kterΘ lze vyu₧φt pro tvorbu GUI na mobilnφch telefonech. Mßte na v²b∞r mezi pou₧φvßnφm vysoko·°ov≥ov²ch komponent nebo pou₧φvßnφ nφzko·rov≥ov²ch. JeÜt∞ jedna mo₧nost vlastn∞ a to pou₧φvßnφ obou dohromady, to neznamenß, ₧e by polovina formulß°e bylo pomocφ vysoko·rov≥ovΘh a zbytek pomocφ nφzko·rov≥ovΘho, ale ₧e by n∞kterΘ obrazovky bylo vytvo°eny pomocφ jednoho a zbylΘ pomocφ druhΘho. Vysoko·°ov≥ovΘ komponenty jsou dobrΘ pro programy, kterΘ pob∞₧φ na mnoha odliÜn²ch za°φzenφch podporujφcφ MIDP, proto₧e jsou dob°e p°enositelnΘ a m∞ly by fungovat vÜude stejn∞. Za p°enositelnost ale budete muset zaplatit tφm, ₧e nejdou vytvß°et vlastnφ komponenty a ani moc nastavovat ty stßvajφcφ. To neznamenß, ₧e vysoko·rov≥ovΘ API je nepou₧itelnΘ, ale spφÜe to, ₧e vÜechny vaÜe aplikace budou vlastn∞ vypadat stejn∞, proto₧e pou₧φvajφ stejnΘ prvky. Pokud budete nap°φklad vytvß°ete hry a nepo₧adujete aby vaÜe hra b∞₧ela na vÜech dostupn²ch telefonech na trhu stejn∞, i kdy₧ je mo₧nost ud∞lat vφce druh∙ pro r∙znΘ telefony, aby na ka₧dΘm vypadala co nejlΘpe, tak prßv∞ pro vßÜ je tu nφzko·rov≥ovΘ API. Je to takov² opak vysoko·°ov≥ovΘho API, mßte plnou kontrolu nad tφm co se bude zobrazovat, musφte vÜe umφstit a nastavit. Dß to sice vφce prßce, ale v²sledek stojφ za to, proto₧e m∙₧ete ud∞lßte aplikaci, kterß bude vypadat ·pln∞ jinak, ne₧ p°i pou₧itφ vysoko·rov≥ov²ch komponent. Jak jsem ale psal, tak p°enositelnost nemusφ b²t moc dobrß, ale zase pokud budete nap°φklad d∞lat programy pro telefony od jednΘ znaΦky, kterΘ budou mφt podobn∞ velk² displej a podobn² hardware, tak to zase takov² problΘm nebude.


Vysoko·rov≥ovΘ API

V²klad zaΦneme u vysoko·rov≥ovΘho API, proto₧e je na zaΦßtek jednoduÜÜφ a takΘ kv∙li tomu, ₧e majφ spoleΦnΘ v∞ci i s nφzko·rov≥ov²mi komponentami.

Zßkladem zobrazovßnφ je t°φda javax.microediton.lcdui.Display ze kterΘ m∙₧ete zφskat mnoho informacφ o zobrazovacφm za°φzenφ, nap°φklad v²Üku a Üφ°ku displeje. D∙le₧itou metodou pro nßs je metoda setCurrent(), pomocφ kterΘ se zobrazujφ objekty, kterΘ chceme zobrazit.

Abstraktnφ t°φda javax.microedition.lcdui.Screen je zßkladem pro zobrazovßnφ GUI vysoko·rov≥ovΘho API. Mß Φty°i potomky (podt°φdy) a to Alert, Form, List a TextBox.

Alert zobrazuje r∙znß hlßÜenφ, t°eba informaΦnφ, chybovΘ atd.

Form je vlastn∞ kontejnerovß komponenta do kterΘ se p°idßvajφ dalÜφ komponenty, kterΘ jsou potomky abstraktnφ t°φdy javax.microedition.lcdui.Item.

List zobrazuje seznam polo₧ek, kterΘ m∙₧ou mφt textov² popis a obrßzek.

Poslednφ TextBox zobrazφ p°es celou obrazovku oblast pro psanφ textu.

Nßsledujφcφ p°φklad je p°φkladem, kter² byl v minulΘm dφle, ale te∩ se na n∞j podφvßme z jinΘho pohledu, proto₧e u₧ rozumφme vÜem v∞cem v n∞m



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

public class PrvniMidlet extends MIDlet {

  Display display;
  TextBox textBox;
  
  public PrvniMidlet() {
  
  }
  
  public void startApp() {
  
    display = Display.getDisplay(this);
    textBox = new TextBox("prvni program", "Ahoj svete", 15, 0);
    display.setCurrent(textBox);
	
  }
  
  public void pauseApp() {
  
  }
  
  public void destroyApp(boolean unconditional) {
  
  }
}

	  

Na zaΦßtku programu jsou deklarovßny dv∞ prom∞nnΘ t°φdy, jedna je typu Display a druhß typu TextBox. T°φda Display, jak jsme si °ekli, odkazuje na displej za°φzenφ a t°φdu TextBox lze zobrazit na displeji. Metoda startApp() zaΦφnß inicializacφ objektu display a to volßnφm statickΘ metody t°φdy Display, kterß vracφ odkaz na displej za°φzenφ. Je d∙le₧itΘ provΘst tuto inicializaci a₧ metod∞ startApp() a ne t°eba v konstruktoru, proto₧e podle specifikacφ musφ metoda getDisplay() vracet aktußlnφ odkaz a₧ v metod∞ startApp(). Dßle je tu inicializace prom∞nnΘ textBox. Nakonec volßme metodu setCurrent(), pro zobrazenφ prom∞nnΘ textBox.

Nßsledujφcφ p°φklad bude skoro stejn², ale s tφm rozdφlem, ₧e pro zobrazenφ pou₧ijeme objekt t°φdy List, kterß na displeji telefonu zobrazφ seznam.


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

public class ListMidlet extends MIDlet {

  Display display;
  List list;
  
  public ListMidlet() {
  
  }
  
  public void startApp() {
  
    display = Display.getDisplay(this);
    list = new List("Seznam", List.EXCLUSIVE);
	list.append("prvni", null);
	list.append("druha", null);
	list.append("treti", null);
	
    display.setCurrent(list);
	
  }
  
  public void pauseApp() {
  
  }
  
  public void destroyApp(boolean unconditional) {
  
  }
}

	  


P°φklad ukazuje pou₧itφ dalÜφ p°φmo zobrazovatelnΘ komponenty a tou je List. V konstruktoru specifikujete nßzev seznamu a jeho typ. Dßle u₧ jen p°idßvß polo₧ky, kterΘ majφ nßzev, ale neobsahujφ obrßzek, proto druh² argument metody append() obsahuje null.

Zßv∞r

V tomto dφle jsme trochu zaΦali pou₧φvat vysoko·rov≥ovΘ API pro grafickΘ u₧ivatelskΘ prost°edφ. P°φÜt∞ ji₧ podrobn∞ rozeberu jednotlivΘ komponenty, jejich konstruktory a metody. T∞Üφm se u dalÜφho dφlu na shledanou.



Alen Dvo°ßk