Vysoká škola ekonomická v Praze

Rozměr: px
Začít zobrazení ze stránky:

Download "Vysoká škola ekonomická v Praze"

Transkript

1 Vysoká škola ekonomická v Praze Fakulta informatiky a statistiky Katedra informačních technologií Student Vedoucí bakalářské práce Recenzent bakalářské práce : Ondřej Dušek : Ing. Rudolf Pecinovský, CSc. : Lucie Bittnerová TÉMA BAKALÁŘSKÉ PRÁCE Možnosti využití platformy Java ME ve vstupních kurzech programování ROK : 2008

2 Prohlášení Prohlašuji, že jsem bakalářskou práci zpracoval samostatně a že jsem uvedl všechny použité prameny a literaturu, ze kterých jsem čerpal. V Praze dne podpis

3 Poděkování Děkuji vedoucímu práce za podnětné rady a připomínky při psaní této práce i za zapůjčené materiály k nastudování související problematiky.

4 Abstrakt česky Cílem této práce je implementovat výukovou knihovnu Tvary pro kreslení a jednoduchou animaci tvarů. Součástí je také ukázka použití zmíněné knihovny na aplikaci, která simuluje provoz ve městě. Teoretická pasáž je zaměřena na charakteristiku platformy Java ME, její odlišnosti od populární Java SE a některé nové vlastnosti. Další část je věnována popisu samotné implementace zmíněné knihovny a zejména odlišnostem, které změna platformy přinesla. V závěru kapitoly je uveden návod, jak připravit aplikaci využívající této knihovny do fáze, kdy bude spustitelná na mobilním zařízení. Abstrakt anglicky The main goal of this thesis is to implement learning library Shapes for shapes drawing and simple animation. Part of the thesis is also a sample application, which shows usage on a traffic simulation in a town. The theoretical passage is focused on the Java ME platform characteristics, its differences from the popular Java SE and some new features. The next part is devoted to the description of the implementation process of the mentioned library and especially to distinguish the differences that have been caused by the platform switch. In conclusion of the chapter there is a user guide describing how to make an application based on this library ready to work on any mobile device.

5 Obsah 1 Úvod Java Platform, Micro Edition (Java ME) Konfigurace Connected Limited Device Configuration (CLDC) Connected Device Configuration (CDC) Profily Mobile Information Device Profile (MIDP) Information Module Profile (IMP) Foundation Profile Personal Basis Profile Personal Profile Rozšiřující balíčky Programování v CLDC a MIDP Generic Connection Framework (GCF) Streamové sockety Datagramové sockety MIDlet Aktivní stav Pozastavený stav Ukončený stav Sada midletů Distribuce midletů Uživatelské rozhraní Vysokoúrovňový přístup Nízkoúrovňový přístup Record Management System (RMS) Knihovna Tvary Implementace Třída CanvasManager Třída Painter Třída Direction8...33

6 4.1.4 Třída NamedColor Třída Multimover Třída Picture Třída Text Tvorba aplikací používajících knihovnu Tvary Vytvoření projektu Vytvoření aplikace Spuštění aplikace a tvorba JAR archivu Nastavení kódování Závěr...39

7 1 Úvod V uplynulém desetiletí jsem byl svědkem velkého rozmachu mobilních zařízení, jako jsou GPS navigace, elektronické diáře a v neposlední řadě i mobilní telefony. Z počátku se jednalo o přísně jednoúčelové přístroje, jejichž dostupnost byla díky vysoké ceně značně omezená. Avšak silná konkurence přála rychlému technologickému vývoji v této oblasti a nyní jsou zmíněná mobilní zařízení univerzální natolik, že jejich funkce mnohdy splývají a přijatelná cena je dělá dostupnými pro naprostou většinu obyvatelstva. Vývoj nativních programů pro tato zařízení je díky velkému množství výrobců velmi obtížný. Logickým krokem je proto abstraktní vrstvou odstínit některé odlišnosti a zavést jednotný programovací jazyk. Přesně to dělá v dnešní době široce podporovaná platforma Java ME. Tato práce si klade za cíl implementaci výukové knihovny pro kreslení a jednoduchou animaci tvarů na tuto platformu, jež umožní snadnou přenositelnost programů bez hlubších znalostí prostředí Java ME. Součástí je i teoretický základ, jenž seznámí čtenáře s možnostmi zmíněné platformy a jejími odlišnostmi oproti známější edici určené osobním počítačům. Zvolené téma jsem vybral, protože je mi programovací jazyk Java blízký zejména platformní nezávislostí, velkým rozšířením a snadnou čitelností. Doposud jsem se setkával pouze s platformou Java SE a tato práce pro mě byla motivací seznámit se s možnostmi programování pro mobilní zařízení. Teoretická a i praktická část práce předpokládá, že čtenář je obeznámen s vývojem programů na platformě Java SE a rozumí všem základním pojmům, vztahujícím se k objektově orientovanému programování v jazyce Java. 1

8 2 Java Platform, Micro Edition (Java ME) Platforma programovacího jazyka Java je dostupná v několika edicích. Pro osobní počítače je určená standardní edice Java SE, pro vývoj serverových aplikací Java EE a pro mobilní zařízení s omezenými zdroji právě Java ME. Na rozdíl od osobních počítačů a serverů jsou však rozdíly mezi jednotlivými typy mobilních zařízení výrazně větší, a to jak ve výkonu, dostupné paměti, tak i z hlediska uživatelského vstupu a výstupu. Z tohoto důvodu Java ME definuje soubor specifikací různých pro lišící se podmnožiny mobilních zařízení, takzvané konfigurace a profily. Podpora prostředí Javy pro jedno konkrétní zařízení je pak dána právě konfigurací a podporovanými profily. Podporu některých specifických funkcí dále přidávají rozšiřující balíčky. 2.1 Konfigurace Konfigurace určuje softwarové prostředí pro podmnožinu mobilních zařízení s danou minimální hardwarovou výbavou. Zpravidla jsou kladeny požadavky na typ i frekvenci procesoru, paměti a síťové připojení. V současné době jsou k dispozici konfigurace Connected Limited Device Configuration (CLDC) a Connected Device Configuration (CDC) Connected Limited Device Configuration (CLDC) Označení Connected Limited Device Configuration lze vysvětlit jako konfigurace zařízení s omezenými zdroji, jež je připojeno k síti. Takovou konfiguraci specifikace [9] definuje následovně: 160 až 512 kilobajtů paměti pro platformu Java 16bitový nebo 32bitový procesor malá spotřeba energie, obvykle napájeno z baterie připojení k síti s limitovanou šířkou pásma Tyto požadavky splňují převážně malá zařízení jako jsou mobilní telefony či některé diáře. Specifikace nevyžaduje display ani zařízení uživatelského vstupu, to řeší až rozšiřující profil, stejně jako paměť pro trvalé uchování dat aplikací. Proto mohou CLDC využít i zařízení bez obrazovky, jejichž výstupem je například sada diod. Na hostitelský systém nejsou kladeny žádné specifické požadavky, implementaci virtuálního stroje provádí výrobci zařízení podle specifikace a referenční implementace. Nepodporuje-li systém vícevláknové prostředí, musí ho virtuální stroj simulovat. 2

9 V současné době je k dispozici CLDC 1.0 a jeho revize CLDC 1.1. Liší se množinou podporovaných funkcí a požadavky na paměť cílového zařízení. Konfigurace CLDC 1.0 vychází z Java SE verze 1.3 a s ní sdílí shodnou syntaxi zápisu. Obsahuje třídy nebo jejich část, které jsou převzaté právě z této platformy. Kromě toho přidává nový balíček javax.microedition.io pro podporu síťového připojení. Seznam vlastností podle referenční příručky [15], jejichž podpora nebyla do CLDC 1.0 zahrnuta, je následující: Vlastnosti třídy Object finalizace klonování Slabá reference (weak reference) Čísla s podporou plovoucí desetinné čárky datové typy double a float obalové třídy Double a Float Rozhraní Comparable Většina metod pro podporu reflexe Rozhraní nativních podprogramů (JNI) Vlastnosti vláken Skupiny vláken ThreadGroup Vlákna neblokující ukončení programu (daemon thread) Přerušení vlákna voláním metody interrupt() Názvy vláken Některé chybové třídy, zařízení se zotavují specificky (například resetem) Některé kolekce, dostupné jsou pouze třídy Vector, Stack a Hashtable Některé funkce data a času Třída Calendar slouží pouze ke zjišťování jednotlivých složek data a času Třída TimeZone podporuje pouze časové pásmo GMT, ostatní jsou volitelná 3

10 Třídy vstupních a výstupních proudů v balíčku java.io, kromě proudů pro pole bajtů Revize CLDC 1.1 je určená pro novější zařízení s větší kapacitou dostupné paměti. Podle specifikace [12] přidává oproti CLDC 1.0 následující vlastnosti: Podpora čísel s plovoucí desetinnou čárkou Slabá reference (weak reference) Třídy Calendar, Date a TimeZone jsou blíže svým protějškům z Java SE Určuje ošetření chybových stavů, možné jsou dva způsoby Zastavení virtuálního stroje Vyhození chyby Vlastnosti vláken Možnost určit název stejně jako v Java SE Přerušení vlákna voláním metody interrupt() Connected Device Configuration (CDC) CDC je konfigurace určená pro výkonnější zařízení, jako jsou některé osobní diáře, set-top boxy apod. Typické vlastnosti těchto zařízení jsou podle technologického přehledu CDC [7]: 2 megabajty operační paměti 2,5 megabajtů paměti pro čtení 32bitový procesor Oproti CLDC neobsahuje CDC žádná omezení vyplývající z nedostatečného výkonu nebo paměťové kapacity cílových zařízení. Nejnovější CDC 1.1 vychází z Java SE verze Profily Profil doplňuje konfiguraci o další funkcionalitu specifickou pro určitou skupinu zařízení. Zpravidla přidává třídy pro práci s uživatelským vstupem, zobrazovacím zařízením, lokálním úložištěm dat, apod Mobile Information Device Profile (MIDP) MIDP je rozšiřující profil pro konfiguraci CLDC. Přidává podporu nových funkcí typických 4

11 pro mobilní telefony a diáře. Taková zařízení musí mít display s přibližně čtvercovými body s minimálním rozlišením 96x54 bodů a barevnou hloubkou 1 bit na pixel. Dále je vyžadována klávesnice mobilního telefonu typu ITU-T nebo klasická QWERTY klávesnice a volitelně může zařízení disponovat dotykovou obrazovkou. Potřeba je i paměť pro trvalé ukládání dat aplikací. Hostitelský systém musí umožnit virtuálnímu stroji číst i zapisovat do této paměti a komunikovat prostřednictvím bezdrátové sítě. Kromě toho je požadován mechanismus poskytující časovou základnu k označování záznamů datového úložiště a pro podporu časovačů (třída Timer), bitově mapovaný přístup k obrazovce zařízení a zachytávání událostí uživatelského vstupu. MIDP přináší třídy pro podporu následujících vlastností (podrobněji viz kapitola 3): Zobrazování výstupu na displayi Zpracování událostí uživatelského vstupu z klávesnice nebo dotykové obrazovky Řízení běhu programu pomocí tzv. midletů Trvalé ukládání dat aplikací V současné době je k dispozici verze MIDP 1.0 a 2.0, připravuje se 3.0. Ve verzi 2.0 jsou navíc některé nové vlastnosti: Podpora zvuku Nový bezpečnostní model Vylepšené uživatelské rozhraní Herní rozhraní pro snazší vývoj her založené na vrstvách Šifrovaná komunikace protokolem HTTPS Automatické spouštění midletů V připravované verzi 3.0 se podle shrnutí odborného článku [1] počítá s následujícími novinkami: Minimální velikost displaye 176x220 bodů a barevná hloubka 16 bitů Podpora konfigurace CLDC i CDC Více podporovaných formátů multimediálních souborů (například JPG) Koncept sdílení knihoven mezi midlety, tzv. liblety Více spuštěných midletů současně Práva aplikací 5

12 Podpora protokolu IPv6 Podpora animovaných obrázků Podpora více displayů Vlastní fonty písma Přizpůsobení uživatelského rozhraní Zahrnutí balíčku Mobile Media API pro práci s multimédii Information Module Profile (IMP) IMP je poslední z uvedených profilů rozšiřujících konfiguraci CLDC. Dle specifikace [13] je určen pro zařízení, jejichž možnosti uživatelského rozhraní nejsou dostatečné pro běh MIDP (například síťové karty, routery, automaty). Obsahuje podmnožinu tříd převzatou z profilu MIDP 1.0: Řízení aplikace (pomocí midletů) Trvalé úložiště dat Podpora sítě Podpora časovačů Foundation Profile Foundation Profile je základní profil rozšiřující konfiguraci CDC. Přidává třídy pro podporu síťového přístupu a vstupně-výstupních operací. V kombinaci s CDC poskytuje téměř kompletní nabídku tříd z Java SE, kromě balíčků grafického uživatelského rozhraní. Je určen pro zařízení jako jsou síťové tiskárny, routery, apod Personal Basis Profile Tento profil zahrnuje Foundation Profile a k tomu přidává další funkcionalitu. Jedná se o částečnou podporu uživatelského rozhraní vytvářeného pomocí podmnožiny tříd z balíčku java.awt a možnost pracovat s tzv. xlety, což je obdoba appletů pro digitální televize a set-top boxy Personal Profile Profil s názvem Personal Profile obsahuje veškerou funkcionalitu zmíněného Personal Basis Profile. Navíc disponuje plnou podporou uživatelského rozhraní AWT, appletů a částečnou 6

13 podporou komponent JavaBean. Personal Profile je poslední mezistupeň před platformou Java SE, je určen zařízením jako jsou například výkonné diáře nebo webové prohlížeče. 2.3 Rozšiřující balíčky Rozšiřující balíčky přidávají podporu specifických funkcí, jimiž mohou některá zařízení disponovat. Balíčky jsou nezávislé a jejich podpora je nepovinná, takže cílové zařízení může podporovat jejich kombinaci podle toho, kterými funkcemi je vybaveno. Vybrané balíčky dle přehledu platformy Java ME [8] podporují následující funkce: Bezdrátová technologie Bluetooth (JSR 82) Integrace aplikací do hostitelského systému pro manipulaci s dokumenty na základě MIME typu nebo URL (JSR 211) Práce s multimédii (JSR 135) 3D aplikace pomocí přístupu k rozhraní OpenGL ES (JSR 239) Webové služby a jazyk XML (JSR 172) Šifrovací funkce, digitální podepisování a podpora karet karet SmartCard (JSR 177) Pokročilé uživatelské rozhraní a grafika (JSR 209) Vzdálené volání metod RMI (JSR 66) Rozhraní pro přístup k databázím JDBC (JSR 169) Podpora digitálních TV tunerů (JSR 927) 7

14 3 Programování v CLDC a MIDP 3.1 Generic Connection Framework (GCF) Vzhledem k limitovaným prostředkům cílových zařízení platformy Java ME je balíček tříd java.io příliš robustní. Proto byl vytvořen Generic Connection Framework, zjednodušený a univerzální balíček tříd javax.microedition.io umožnující komunikovat pomocí různých protokolů. GCF je podporován i konfigurací CLDC a profily MIDP. Třída Connector slouží k vytvoření libovolného připojení pomocí volání jedné ze tří statických metod open: Ilustrace 3.1: Hierarchie rozhraní a souvisejících tříd GCF, zdroj [3] open(string name) open(string name, int mode) open(string name, int mode, boolean timeouts) Parametr name určuje schéma použitého protokolu, adresu a parametry připojení. Zadává se ve tvaru: {schéma:[{adresa][{parametry] Jednotlivé parametry připojení se zadávají ve tvaru: ;název=hodnota 8

15 Parametr mode zmíněné metody může nabývat hodnot konstant READ, READ_WRITE a WRITE, které určují možnosti vytvářeného spojení. Nastavení posledního parametru timeout na hodnotu true indikuje, že kód aplikace je schopný odchytávat výjimku InterruptedIOException při překročení časového limitu. Naopak hodnota false říká, že výjimka nikdy nenastane. Nastavení true však podporu časového limitu negarantuje, je závislá na konkrétní implementaci a použitém protokolu. Volání uvedené metody open vrací instanci třídy Connection reprezentující spojení. Ta má jedinou metodu close() sloužící k jeho uzavření po skončení práce. Takto získané spojení je nutné přetypovat na některou z dále uvedených tříd podle typu spojení Streamové sockety Streamové (proudové) sockety se používají při vytváření trvalého spojení k cíli. Tento typ spojení garantuje, že se žádná data neztratí, ani nepřijdou ve špatném pořadí. Používá se například ve známém protokolu TCP. Streamové spojení se vytvoří zadáním schématu socket v metodě open. Výsledný parametr name metody potom může vypadat například: socket:// Instanci třídy Connection získanou uvedeným voláním metody open je poté třeba přetypovat na rozhraní StreamConnection. Jeho metody již poskytují přístup ke klasickým vstupním a výstupním proudům. Kromě běžného připojení ke vzdálenému cíli je možné vytvořit i serverové spojení. Server zpravidla naslouchá na nějakém portu a připojující se klienty odbavuje v nových vláknech. Takové spojení se vytvoří jednoduše neuvedením adresy v parametru volané metody open. Poté se vrácená instance Connection přetypuje na rozhraní StreamConnectionNotifier. Jeho jediná metoda acceptandopen() vytváří spojení s klientem a vrací příslušný objekt StreamConnection. Vytvoření serverového spojení lze demonstrovat na jednoduchém příkladě převzatém z referenční příručky [15]: StreamConnectionNotifier serversocket = (StreamConnectionNotifier)Connector.open("socket://:8000"); for (;;) { // Získat další připojení final StreamConnection socket = (StreamConnection)serverSocket.acceptAndOpen(); 9

16 // Zpracovat připojení v novém vlákně Thread t = new Thread() { public void run() { OutputStream os = null; try { os = socket.openoutputstream(); // Zde komunikovat s klientem... catch (IOException ex) { // Zpracovat chybu finally { if (os!= null) { try { os.close(); os = null; catch (IOException ex) { try { socket.close(); catch (IOException ex) { ; t.start(); Datagramové sockety Datagramové sockety nacházejí uplatnění v síťových aplikacích, kde je preferována rychlost nebo jednoduchost oproti spolehlivosti. Data jsou přenášena v jednotlivých vzájemně nezávislých packetech, přičemž každý má svého adresáta. Mohou dorazit na přeskáčku, nebo nemusí dorazit vůbec. Tento typ spojení se používá například v protokolu UDP. Datagramové spojení se vytváří uvedením schématu datagram ve volání metody open. Výsledný parametr name této metody potom vypadá například takto: datagram:// Získaný objekt Connection se poté přetypuje na rozhraní DatagramConnection. Pomocí jedné z jeho metod newdatagram se vytvoří samotný objekt Datagram, který lze poté odeslat voláním send(datagram dgram) respektive přijmout voláním receive(datagram dgram). 10

17 3.2 MIDlet Programy spouštěné pod profily MIDP se nazývají midlety. Specifikace [11] určuje, jakým způsobem se bude běh těchto programů řídit. K tomu se používá abstraktní třída MIDlet z balíčku javax.microedition.midlet. Po odvození spouštěcí třídy od této se musí implementovat tyto tři metody: startapp() pauseapp() destroyapp(boolean unconditional) Tyto metody jsou volány při přechodu do jednoho ze tří definovaných stavů midletu Aktivní stav Aplikace normálně běží a je zobrazena na display mobilního zařízení. Midlet se do tohoto stavu dostává těsně před voláním metody startapp() Pozastavený stav V tomto stavu je midlet zinicializovaný, ale neběží. Měl by uvolnit používané prostředky. Tento stav nastává: Po vytvoření instance třídy MIDlet voláním konstruktoru, než dojde ke spuštění (přechodu do aktivního stavu). Po volání metody pauseapp() následovaném voláním notifypaused(). Pokud metoda startapp() vyhodí výjimku MIDletStateChangeException. Midlet se může pokusit dostat z tohoto stavu voláním metody resumerequest(). Bude-li mu vyhověno, dojde k volání startapp() a následnému přechodu do aktivního stavu Ukončený stav Midlet uvolnil všechny prostředky a je ukončený. Před přechodem do tohoto stavu se zavolá metoda destroyapp(boolean unconditional). Parametr unconditional určuje násilné ukončení, kterému nejde zabránit. Je-li nastaven na hodnotu false, lze ukončení přerušit vyhozením výjimky MIDletStateChangeException. Ukončit běh programu může také programátor, zavoláním metody notifydestroyed(). 11

18 Ilustrace 3.2: Stavy midletu a události volané při jejich změně, zdroj [10] Následující příklad ukazuje, jak může vypadat midlet: import javax.microedition.midlet.midlet; import javax.microedition.midlet.midletstatechangeexception; public class Příklad extends MIDlet { // první volání metody startapp() private boolean once = false; public Příklad() { super(); // inicializace programu protected void startapp() throws MIDletStateChangeException { if (once == false) { once = true; // došlo ke spuštění aplikace // kód programu // přechod z pozastaveného stavu do aktivního protected void pauseapp() { // přechod z aktivního do pozastaveného stavu protected void destroyapp(boolean unconditional) throws MIDletStateChangeException { // přechod z aktivního nebo pozastaveného do ukončeného stavu 12

19 K volání metody startapp() dochází opakovaně, proto proměnná once rozlišuje mezi spuštěním aplikace a přechodem z pozastaveného do aktivního stavu. Veškerou inicializaci aplikace, kterou je možné provést, dokud midlet není zobrazen na displayi, se doporučuje provádět v konstruktoru třídy Sada midletů Aplikace se na mobilní zařízení distribuují komprimované v JAR archivu. V takovém archivu se ale nemusí nacházet jenom jeden midlet, může jich tam být více. Jednotlivé aplikace ve společném archivu potom sdílí prostředky, jako jsou statické třídy, instance a záznamy datového úložiště. K vzájemné synchronizaci lze použít klasických prostředků k synchronizaci vláken Distribuce midletů Sady midletů se distribuují v Java Archivu (JAR), jenž obsahuje metadata v souboru MANIFEST.MF ve složce META-INF. Aby nebylo třeba stahovat celý archiv ke zjištění kompatibility sady s konkrétním zařízením, přikládá se k němu takzvaný deskriptor s příponou jad. Manifest i deskriptor jsou textové soubory obsahující určité vlastnosti sady midletů. Jejich popis dle specifikace [10] je uveden v následující tabulce: 13

20 Vlastnost Popis MIDlet-Name Název sady midletů, určeno pro identifikaci konkrétní sady uživatelem. MIDlet-Version Verze sady ve formátu a.b.c, přičemž priorita číslic klesá zleva doprava. MIDlet-Vendor Poskytovatel sady MIDlet-Icon Název PNG souboru v archivu, jenž se zobrazí jako ikona sady. MIDlet-Description Popis sady MIDlet-Info-URL URL souboru s podrobnějším popisem. Obsah tohoto souboru se může zobrazit uživateli před instalací sady. MIDlet-<n> Atributy jednotlivých midletů oddělené čárkou (název, soubor ikony, spouštěcí třída). Čísla jednotlivých midletů <n> musí stoupat popořadě od jedničky. MIDlet-Jar-URL URL odkaz na archiv této sady MIDlet-Jar-Size MIDlet-Jar-Size MIDlet-Data-Size Minimální velikost požadovaného prostoru v trvalém úložišti v bajtech MicroEdition-Profile Profil potřebný ke spuštění aplikace MicroEdition-Configuration Konfigurace potřebná ke spuštění aplikace Tabulka 1: Tabulka vlastností sady midletů K těmto vlastnostem lze také přistupovat voláním metody getappproperty(string key) třídy MIDlet. Specifikace [10] určuje, které z uvedených vlastností budou uvedeny v manifestu a deskriptoru sady. 14

21 Vlastnost Manifest obsahuje Deskriptor obsahuje MIDlet-Name povinně povinně MIDlet-Version povinně povinně MIDlet-Vendor povinně povinně MIDlet-<n> pro každý midlet povinně MicroEdition-Profile MicroEdition-Configuration povinně povinně MIDlet-Description volitelně volitelně MIDlet-Icon volitelně volitelně MIDlet-Info-URL volitelně volitelně MIDlet-Data-Size volitelně volitelně MIDlet-Jar-URL MIDlet-Jar-Size povinně povinně Tabulka 2: Vlastnosti obsažené v manifestu a deskriptoru sady První tři vlastnosti musí být shodné v obou souborech, jinak se sada odmítne nainstalovat. Ostatní se mohou lišit. V takovém případě dostanou přednost hodnoty uvedené v deskriptoru. Soubor deskriptoru může vypadat jako v následujícím příkladě: MIDlet-1: Midlet,,town.Midlet MIDlet-2: Priklad,,town.Priklad MIDlet-Jar-Size: MIDlet-Jar-URL: townme.jar MIDlet-Name: townme MIDlet-Vendor: Vendor MIDlet-Version: 1.0 MicroEdition-Configuration: CLDC-1.0 MicroEdition-Profile: MIDP

22 3.3 Uživatelské rozhraní Pro přístup k obrazovce zařízení slouží třídy z balíčku javax.microedition.lcdui. Třída Display reprezentuje obrazovku, pro každý midlet je vytvořena právě jedna instance, získá se voláním statické metody getdisplay(midlet m). Jakmile je k dispozici instance, lze použít následujících metod: getcurrent() setcurrent(displayable nextdisplayable) setcurrent(alert alert, Displayable nextdisplayable) callserially(runnable r) iscolor() numcolors() Na displayi určitého midletu lze najednou zobrazit právě jednu virtuální obrazovku reprezentovanou rozhraním Displayable. K tomu slouží metoda setcurrent, jejíž parametrem je zvolená virtuální obrazovka. Volitelný parametr alert určuje výstrahu, jejíž zobrazení předchází (viz podkapitola o vysokoúrovňovém přístupu). Aktuálně viditelnou virtuální obrazovku lze získat voláním getcurrent. Informaci o tom, jestli má zařízení k dispozici barevný display, vrací metoda iscolor. Počet podporovaných barev respektive stupňů šedi se zjistí voláním numcolors. Události uživatelského rozhraní včetně překreslování displaye se zpracovávají postupně a má je na starosti jediné vlákno. Metoda callserially umožňuje tomuto vláknu spustit programátorem definovaný kód. Ke spuštění dojde krátce po dokončení překreslování displaye, proto lze tuto metodu využít například ke střídání obrázků v jednoduché animaci. Virtuální obrazovky mohou obsahovat příkazy reprezentované třídou Command, přístupné pomocí funkčních kláves zařízení. Příkaz se vytvoří voláním konstruktoru: Command(String label, int commandtype, int priority) Parametr label určuje nápis zobrazený u funkční klávesy. Druhý parametr označuje sémantický význam příkazu a musí mít hodnotu jedné z konstant BACK, CANCEL, EXIT, HELP, ITEM, OK, SCREEN nebo STOP. Nijak neovlivňuje funkci příkazu, jen umožňuje zařízení zobrazit příkaz obvyklým způsobem (například volbu storno na pravé straně obrazovky, OK uprostřed, apod). Poslední parametr priority ovlivňuje umístění příkazů stejného typu. Nižší číslo znamená důležitější příkaz a přístupnější umístění. Je-li příkazů více než funkčních kláves zařízení, zobrazí se pod některou 16

23 z nich nabídka umožnující výběr ze zbylých příkazů. K zachytávání událostí příkazů slouží posluchač CommandListener s jedinou metodou: commandaction(command c, Displayable d) Parametr c je zvolený příkaz a d virtuální obrazovka, na níž je umístěn. V MIDP jsou možné dva přístupy k uživatelskému rozhraní. Vysokoúrovňový přístup reprezentovaný virtuální obrazovkou Screen a nízkoúrovňový reprezentovaný plátnem Canvas Vysokoúrovňový přístup Tento přístup je vhodný, vyžaduje-li aplikace maximální přenositelnost. Samotné kreslení provádí konkrétní implementace, což přináší některá omezení. Aplikace nemůže přímo přistupovat k vstupnímu zařízení, ani nemá možnost určit vizuální stránku jednotlivých komponent. Výhodou tohoto přístupu je jednoduchost a přenositelnost. Vysokoúrovňový přístup využívají následující třídy odvozené od Screen: Alert Form List TextBox Třída Alert reprezentuje virtuální obrazovku, jež zobrazí výstrahu a počká stanovený čas. Poté vrátí původní obsah displaye nebo novou zvolenou obrazovku. Výstrahou je textový řetězec volitelně doplněný obrázkem. Místo stanoveného času lze zadat konstantu FOREVER, což znamená vyčkání na interakci uživatele. Třída Form umožňuje zobrazit libovolnou kombinaci položek vytvořených odvozením od třídy Item. O určení rozvržení ani o případné vertikální rolování se není potřeba starat, je zajištěno aktuální implementací. Objekty se spravují prostřednictvím metod append, insert, delete, get a set. Pořadí objektů určuje pozice v seznamu formuláře. Pomocí posluchače ItemStateListener je možné zachytávat změnu stavu všech položek na formuláři. Jeho jediná metoda itemstatechanged vrací položku, jejíž stav byl změněn. K nastavení tohoto posluchače slouží metoda: setitemstatelistener(itemstatelistener ilistener) Do formuláře lze umístit jednu z následujících položek odvozených od třídy Item: 17

24 StringItem (textový řetězec) ImageItem (obrázek) TextField (textové pole) DateField (pole pro zadání data a času) Gauge (měřidlo) ChoiceGroup (seznam) Textové pole určené třídou TextField umožňuje nastavit omezení povolených znaků následující metodou: setconstraints(int constraints) Parametry jsou určeny jednou z konstant téže třídy uvedených v následující tabulce: Konstanta ANY ADDR NUMERIC Omezení textového pole Libovolný text ová adresa Celočíselná hodnota PHONENUMBER Telefonní číslo URL PASSWORD URL adresa Maskování znaků pomocí nějakého symbolu; lze kombinovat s ostatními Tabulka 3: Konstanty k omezení zadávaných znaků textového pole Položka formuláře ChoiceGroup zobrazuje seznam volitelných elementů, které se skládají z textového popisu a obrázku. V konstruktoru třídy lze pomocí konstant určit typ skupiny. Hodnota EXCLUSIVE povolí označit pouze jeden element, hodnota MULTIPLE umožní označit libovolně elementů. Následující příklad ukazuje vytvoření formuláře k odeslání dotazu, kde uživatel může zvolit, zda chce komunikovat prostřednictvím telefonu nebo elektronické pošty. Podle toho se pak nastavuje omezení zadávaných znaků pro textové pole. // Jednotlivé položky ve formuláři final TextField zpráva = new TextField("Text dotazu", "", 128, TextField.ANY); final ChoiceGroup volba = new ChoiceGroup("Odpovědět na", ChoiceGroup.EXCLUSIVE, new String[] {"Telefon", " ", null); final TextField kontakt = new TextField("Kontakt", "", 32, TextField.PHONENUMBER); // Samotný formulář 18

25 final Form formulář = new Form("Informace", new Item[] {zpráva, volba, kontakt); // Příkaz k odeslání a zrušení final Command odeslat = new Command("Odeslat", Command.OK, 0); final Command zrušit = new Command("Zrušit", Command.CANCEL, 0); formulář.addcommand(odeslat); formulář.addcommand(zrušit); // Posluchač změn jednotlivých položek ve formuláři formulář.setitemstatelistener(new ItemStateListener() { public void itemstatechanged(item item) { if (item.equals(volba)) { // Vymaže pole kontakt.setstring(null); ); // Nastaví omezení kontakt.setconstraints(volba.isselected(0)? TextField.PHONENUMBER : TextField. ADDR); // Posluchač příkazů formulář.setcommandlistener(new CommandListener() { public void commandaction(command c, Displayable d) { if (odeslat.equals(c)) { // Odeslání formuláře else if (zrušit.equals(d)) { // Storno ); // Zobrazí formulář na obrazovce Display.getDisplay(this).setCurrent(formulář); Další z virtuálních obrazovek odvozených od Screen je třída List. Chová podobně jako formulářová položka ChoiceGroup, jen seznam zobrazí přes celou obrazovku. Pomocí následujících konstant lze nastavit jeho chování: Konstanta IMPLICIT Chování seznamu Zobrazí seznam stylem podobným kontextové nabídce, kde se aktuálně označená položka považuje za volbu uživatele. EXCLUSIVE Ze seznamu lze vybrat pouze jednu položku. MULTIPLE Je možné vybrat libovolně položek. Tabulka 4: Konstanty k určení chování celoobrazovkového seznamu Pouze seznam prvního typu umožňuje zachytávat události při změně výběru. U ostatních dvou typů je nutné počkat, až uživatel volbu potvrdí některým z přiřazených příkazů a v nastalé události 19

26 posluchačem CommandListener zjistit jeho volbu. Je-li seznam nastaven konstantou IMPLICIT, každá jeho změna vyvolá událost commandaction, kde zvolený příkaz je roven konstantě SELECT_COMMAND. Poslední celoobrazovkovou komponentou je třída TextBox. Chová se shodně s formulářovou verzí textového pole, jediný rozdíl spočívá v nemožnosti zachytávat průběžně události změn textu. TextBox umí informovat pouze o zvolení přiřazeného příkazu použitím metod zděděných od abstraktní třídy Displayable Nízkoúrovňový přístup Nízkoúrovňový přístup umožňuje přímo určit barevné hodnoty jednotlivých obrazových bodů, nicméně je třeba počítat s lišícím se rozlišením a podporovaným počtem barev různých zařízení. Samotné kreslení se realizuje prostřednictvím třídy Canvas odvozené od Displayable, překrytím její abstraktní metody: paint(graphics g) To je také jediný způsob, jak získat objekt Graphics náležící plátnu, jenž poskytuje metody ke kreslení. Specifikace [10] zakazuje podržení tohoto objektu mimo metodu paint. Kromě kreslení na plátno je také možné kreslit do obrázku Image. Jeho metoda getgraphics poskytne příslušný objekt a s tím již lze nakládat dle potřeby. K volání zmíněné metody paint plátna dochází v případech: Zobrazení plátna na display metodou setcurrent Potřeby překreslit obrazovku po zmizení výstrahy Alert nebo systémového dialogu Volání metody repaint Instance třídy Canvas dále poskytuje metody getheight, getwidth pro zjištění velikosti plátna v obrazových bodech. Překrytím hidenotify a shownotify lze získávat informaci o viditelnosti plátna, přičemž mezi voláním obou metod v uvedeném pořadí nedochází k jeho překreslování. V nízkoúrovňovém přístupu se k určení polohy vykreslovaných bodů užívá souřadnic horizontální osy X a vertikální osy Y. Počátkem je levý horní roh obrazovky. Udávané hodnoty na osách symbolizují jakousi pomyslnou mřížku mezi jednotlivými obrazovými body. To je důležité při kreslení a vyplňování tvarů objektem Graphics. 20

27 drawrect(0, 0, 4, 2) fillrect(0, 0, 4, 2) Ilustrace 3.3: Kreslení a vyplňování tvarů v MIDP, zdroj [15] Metodou translate téhož objektu je možné posunout počátek os souřadnic o zadaný počet obrazových bodů, následkem čehož bude posunutí pozice všech nově nakreslených tvarů. Parametry se určuje horizontální a vertikální vzdálenost od aktuálně nastaveného počátku. Jejich absolutní hodnoty vzhledem k bodu (0, 0) lze získat voláním gettranslatex a gettranslatey. Kreslení prostřednictvím objektu Graphics běžně ovlivňuje celou plochu plátna respektive obrázku. Nicméně je k dispozici možnost omezit ovlivněnou plochu definováním výseku, mimo který nemají kreslící metody žádný efekt. K tomu slouží následující metody: setclip(int x, int y, int width, int height) cliprect(int x, int y, int width, int height) Jejich parametry určují levý horní a pravý dolní roh obdélníku výseku. První z uvedených, setclip, nastaví výřez nezávisle na tom, co bylo doposud nastaveno. Druhá, cliprect, udělá průnik z aktuálního výseku a nově zadaných souřadnic, takže výslednou oblast může pouze zmenšit. Výseků se využívá také v metodě repaint k překreslení zadané části plátna objektu Canvas. Dojde k volání překryté metody paint, kde předaný objekt Graphics má nastaven určený výřez. MIDP neobsahuje třídu Color, použitá barva pro kreslení se zadává voláním jedné z metod objektu Graphics: setcolor(int RGB) setcolor(int red, int green, int blue) setgrayscale(int value) První z uvedených očekává parametr ve formátu 0x00RRGGBB, kde RR je hodnota červené, GG zelené a BB modré složky v šestnáctkové soustavě. Parametry druhé varianty setcolor jsou klasické hodnoty barevných složek RGB o velikosti Průhlednost není podporována. Poslední 21

28 z uvedených metod nastaví barvu na některý ze stupňů šedi, vyjádřený světlostí na stupnici Kromě barvy lze nastavit i typ čáry pro kreslení obrysu tvarů voláním metody setstrokestyle. Jejím parametrem je jedna z konstant následující tabulky: Konstanta Styl čáry SOLID DOTTED Běžná plná čára Přerušovaná čára Tabulka 5: Konstanty k určení typu čáry Objektem Graphics lze kromě tvarů kreslit i obrázky a text. Odlišnost od Java SE spočívá v zadávání kotvícího bodu, k němuž se vztahují zadané souřadnice. Je určen kombinací horizontální a vertikální polohy dané konstantami v následující tabulce: Konstanta Horizontální poloha bodu LEFT HCENTER RIGHT Levý okraj Střed Pravý okraj Konstanta Vertikální poloha bodu TOP VCENTER Horní okraj Střed BASELINE Účaří písma BOTTOM Dolní okraj Tabulka 6: Konstanty k určení kotvícího bodu Konstanta BASELINE je určena pouze k vykreslování písma, na obrázky ji nelze použít. Stejně tak nelze pomocí VCENTER umisťovat text. Použití kotvícího bodu demonstruje následující příklad: g.translate(0, 20); g.setcolor(255, 128, 0); g.fillrect(0, 0, 100, 20); g.setcolor(0, 0, 0); g.drawstring("některé znaky", 50, 0, Graphics.HCENTER Graphics.BASELINE); g.drawstring("účaří přesahují", 50, 20, Graphics.HCENTER Graphics.BASELINE); Ilustrace 3.4: Ukázka umístění textu pomocí kotvícího bodu 22

29 Metody pro kreslení textu užívají font písma, nastavený voláním setfont objektu Graphics. Jeho parametrem je instance třídy Font získaná voláním jedné ze statických metod téže třídy: getdefaultfont() getfont(int face, int style, int size) První z uvedených vrací standardní font pro použité zařízení. Druhá ho definuje uvedením typu, řezu a velikosti písma. Nepodporuje-li použité zařízení zadaný font, vrátí alespoň podobný podporovaný. Parametry metody getfont se zadávají uvedením jedné z konstant třídy Font, jednotlivé řezy písma spolu lze kombinovat. Konstanta Typ písma FACE_SYSTEM Systémové písmo FACE_MONOSPACE Neproporcionální písmo FACE_PROPORTIONAL Proporcionální písmo Konstanta Řez písma STYLE_PLAIN Obyčejné písmo STYLE_BOLD Tučné písmo STYLE_ITALIC Kurzíva STYLE_UNDERLINED Podtržené písmo Konstanta Velikost písma SIZE_SMALL Malé písmo SIZE_MEDIUM Střední písmo SIZE_LARGE Velké písmo Tabulka 7: Konstanty k určení fontu písma Nízkoúrovňový přístup poskytuje možnost pracovat se vstupním zařízením. Jak je uvedeno v požadavcích MIDP, očekává se, že zařízení disponuje klávesnicí a případně dotykovou obrazovkou. Práci s klávesnicí zařízení zprostředkovává třída Canvas překrytím následujících metod: keypressed(int keycode) keyreleased(int keycode) keyrepeated(int keycode) První dvě události keypressed a keyreleased vznikají při stlačení a při uvolnění klávesy. Další událost keyrepeated informuje o držení klávesy. Nemusí být podporována na všech zařízeních, její dostupnost lze ověřit voláním hasrepeatevents. Tyto tři zmíněné události mají parametr keycode, 23

30 který označuje kód stisknuté klávesy. Pokud je jeho hodnota kladná, odpovídá kódu stisknutého znaku ve sadě Unicode. Specifikace [10] garantuje přítomnost kláves daných konstantami: KEY_NUM0 KEY_NUM6 KEY_NUM1 KEY_NUM7 KEY_NUM2 KEY_NUM8 KEY_NUM3 KEY_NUM9 KEY_NUM4 KEY_POUND KEY_NUM5 KEY_STAR Kromě nich však bývají na některých zařízeních k dispozici i klávesy k hraní her. Proto jsou definovány i takzvané herní akce. Jedná se o akce, které implementace virtuálního stroje automaticky namapuje na existující klávesy. Jejich konstanty jsou následující: UP GAME_A DOWN GAME_B LEFT GAME_C RIGHT GAME_D FIRE K jedné herní akci může být přiděleno i více kláves. K zjištění, jestli byla stisknuta některá z herních akcí, slouží metoda getgameaction, jejíž parametrem je kód klávesy. Pokud tento kód neodpovídá žádné akci, je vrácena nula. Naopak metoda getkeycode převede herní akci na kód klávesy. Nicméně je třeba vzít na vědomí, že vrácená klávesa je pouze jednou z přiřazených. Kód klávesy je číslo, které uživateli aplikace pravděpodobně nic neřekne. A pokud je záporné, nelze jej ani převést na odpovídající znak. Proto metoda getkeyname s parametrem kódu klávesy vrací název zadané klávesy, který lze uživateli zobrazit na výstup. Na některých zařízeních je k dispozici i dotyková obrazovka. V takovém případě má smysl překrýt níže uvedené metody třídy Canvas: pointerpressed(int x, int y) pointerreleased(int x, int y) pointerdragged(int x, int y) První dvě událostí značí, že došlo ke stlačení respektive uvolnění bodu obrazovky, jehož souřadnice předávají parametry x a y. Jestli zařízení tyto události generuje, lze zjistit voláním metody 24

31 haspointerevents. Poslední z uvedených událostí, pointerdragged, je volána opakovaně a svědčí o posunu stisknutého bodu. Metodou haspointermotionevents se zjišťuje její dostupnost. 3.4 Record Management System (RMS) Možnosti trvalého ukládání dat jsou velmi různorodé vzhledem k diferenciaci cílových zařízení. Některá disponují souborovým systémem běžně užívaným v oblasti stolních počítačů, jiná mají k dispozici pouze omezenou paměť v řádu desítek až stovek kilobajtů a vytváření souborů nemusí umožňovat. Proto specifikace [10] definuje novou vrstvu pro přístup k paměti, zvanou Record Management System. Třídy pro práci s ní obsahuje balíček javax.microedition.rms. Logickou strukturu tvoří úložiště záznamů, které jsou identifikovány jejich názvy textovými řetězci. V daném úložišti se nacházejí jednotlivé záznamy tvořené polem bajtů, určené indexem. Indexy mají vlastnosti primárního klíče, takže jsou jedinečné, ale netvoří po sobě jdoucí řadu. Práci s úložištěm zprostředkovává třída RecordStore. Instanci získáme voláním její statické metody: openrecordstore(string recordstorename, boolean createifnecessary) První parametr určuje název a druhý chování v případě, že požadované úložiště neexistuje. Hodnota true zajistí jeho vytvoření. V opačném případě dojde k vyhození výjimky RecordStoreNotFoundException. Pole názvů všech vytvořených úložišť vrací statická metoda listrecordstores. K uloženým datům mohou přistupovat všechny midlety v sadě. Pro další sady jsou neviditelná, aby se zabránilo konfliktům existujících názvů úložišť. K jednomu úložišti lze přistupovat simultánně opětovným voláním openrecordstore. Po skončení práce se uzavře metodou closerecordstore. Je-li otevřeno vícekrát, dojde k zavření až po posledním volání této metody. Ke sledování změn v úložišti slouží posluchač RecordListener s následujícími metodami: recordadded(recordstore recordstore, int recordid) recordchanged(recordstore recordstore, int recordid) recorddeleted(recordstore recordstore, int recordid) První informuje o vytvoření nového záznamu, druhá o jeho změně a třetí o odstranění. Parametry udávají otevřené úložiště a index ovlivněného záznamu. Posluchač se přihlašuje voláním addrecordlistener a odhlašuje voláním removerecordlistener objektu RecordStore. 25

32 Pro práci se záznamy slouží následující metody: addrecord(byte[] data, int offset, int numbytes) deleterecord(int recordid) getrecord(int recordid) getrecord(int recordid, byte[] buffer, int offset) setrecord(int recordid, byte[] newdata, int offset, int numbytes) Metoda addrecord přidá nový záznam a vrátí jeho index, její parametry jsou ukládaná data, pozice začátku čtení a počet přečtených bajtů. Metoda deleterecord odstraní záznam se zadaným indexem. Uložený záznam se získá voláním jedné z metod getrecord, přičemž druhá z nich umožňuje načíst pouze část pole bajtů danou začátkem a délkou. Pro úpravu stávajícího záznamu lze zavolat setrecord. Převod dat na požadované pole bajtů výrazně zjednodušují třídy pro práci s výstupními proudy ByteArrayOutputStream a DataOutputStream, ukázkou je následující příklad: // Vytvoření výstupních proudů ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); // Zapsání dat dos.writeboolean(logickáhodnota); dos.writebyte(bajt); dos.writechar(znak); dos.writeint(číslo); dos.writelong(dlouhéčíslo); dos.writeshort(krátkéčíslo); dos.writeutf(řetězec); dos.close(); // Převod na pole bajtů byte[] data = baos.tobytearray(); Analogicky lze použít třídy ByteArrayInputStream a DataInputStream výstupních proudů k čtení dat z pole bajtů jako v dalším příkladě: // Vytvoření vstupních proudů ByteArrayInputStream bais = new ByteArrayInputStream(data); DataInputStream dis = new DataInputStream(bais); // Čtení dat logickáhodnota = dis.readboolean(); bajt = dis.readbyte(); znak = dis.readchar(); číslo = dis.readint(); dlouhéčíslo = dis.readlong(); krátkéčíslo = dis.readshort(); řetězec = dis.readutf(); 26

33 dis.close(); Záznamy v úložišti je možné procházet pomocí objektu RecordEnumeration. Ten se získá voláním následující metody: enumeraterecords(recordfilter filter, RecordComparator comparator, boolean keepupdated) První parametr filter určuje, které položky do enumerace zahrnout. Pomocí druhého parametru lze nastavit pořadí vracení jednotlivých záznamů. Je-li třetí parametr nastaven na hodnotu true, budou se vždy vracet aktuální záznamy. Naopak hodnota false nastaví vracení záznamů platných k sestavení enumerace, takže může být vrácen index záznam, který již byl odstraněn. Stejně tak nemusí odpovídat pořadí modifikovaných záznamů. Výhodou je úspora použitých zdrojů. Je-li k dispozici objekt RecordEnumeration, jednotlivé záznamy se prochází obdobně jako klasickou enumerací voláním metod: hasnextelement() nextrecord() nextrecordid() Je možné také procházení odzadu pomocí metod: haspreviouselement() previousrecord() previousrecordid() Na rozdíl od klasické enumerace lze voláním reset obnovit výchozí pozici a procházet opětovně. Metoda rebuild aktualizuje enumeraci tak, aby odrážela aktuální stav úložiště. Po ukončení práce by měla být zavolána metoda destroy, která uvolní alokované prostředky. Filtrování záznamů se provádí implementací rozhraní RecordFilter s jedinou metodou: matches(byte[] candidate) Podle dodaných dat v poli bajtů se programátor může rozhodnout, jestli záznam zařadit do enumerace a poté třeba vrátit logickou hodnotu true nebo false. K určení pořadí záznamů je k dispozici rozhraní RecordComparator s metodou: compare(byte[] rec1, byte[] rec2) Po porovnání dat se vrátí jedna z hodnot určených konstantami v následující tabulce: 27

34 Konstanta Význam EQUIVALENT Oba záznamy jsou z hlediska určení pořadí ekvivalentní FOLLOWS První záznam by měl následovat za druhým PRECEDES První záznam by měl předcházet druhému Tabulka 8: Konstanty k určení pořadí záznamů enumerace datového úložiště 28

35 4 Knihovna Tvary Knihovna Tvary je soubor tříd pro snadné kreslení a animaci jednoduchých tvarů. Kreslení probíhá na plátně v kartézské soustavě souřadnic, jednotkou je obrazový bod. Kromě toho je k dispozici mřížka, jež plátno rozděluje na síť polí definované velikosti. Pomocí správce plátna lze tvary přidávat do seznamu malovaných a tím zajistit jejich kreslení, nebo je ze seznamu odebírat. Animací se rozumí následné posouvání tvarů po plátně, popřípadě změna jejich velikosti. Součástí knihovny je i třída určená k zobrazování jednoduchých dialogů (informační, potvrzovací a dialog k zadání hodnoty). Knihovna je vhodná pro začínající programátory. Jako učební pomůcka jim umožňuje jednoduše pracovat s grafickým výstupem programu. Vizualizace některých problémů během výuky programování přispívá ke snadnějšímu pochopení jeho principů. Podrobnější informace o knihovně lze nalézt v knize Myslíme objektově v jazyku Java 5.0 [4]. Ilustrace 4.1: UML diagram knihovny Tvary 29

36 4.1 Implementace Praktická část této práce spočívá v implementaci knihovny Tvarů na platformu Java ME. Z mobilních zařízení dosáhly největšího rozšíření právě mobilní telefony, proto implementace využívá konfiguraci CLDC a profil MIDP. Většina telefonů a podobných zařízení v současnosti disponuje podporou novějších verzí CLDC 1.1 a MIDP 2.0. Při tvorbě koncových aplikací bez přehnaných nároků na kompatibilitu považuji za vhodné používat právě těchto verzí. Nicméně knihovna tvarů není koncovou aplikací, může sloužit k vývoji dalších programů nebo knihoven. Proto využívá starší verze CLDC 1.0 a MIDP 1.0. Její uživatelé tak nejsou zbytečně ochuzeni o možnost vyvíjet programy pro množství starších zařízení. V popisu konfigurace CLDC 1.0 jsem uvedl, že obsahuje pouze některé (často neúplné) třídy z platformy Java SE. Nejrelevantnější z hlediska implementace knihovny Tvary je absence podpory čísel s plovoucí desetinou čárkou a omezená nabídka kolekcí. Výpočty používající desetinná čísla jsem musel upravit, aby bylo dosaženo stejného výsledku s čísly celými. Některé z nich zahrnují i počítání druhé odmocniny, k čemuž se v Java SE volá Math.sqrt. Tato metoda však v CLDC 1.0 není podporována a proto jsem použil knihovnu Integer Square Root function [17]. Poskytuje hned několik metod pro výpočet celočíselné odmocniny v závislosti na požadované přesnosti. Problém s kolekcemi jsem vyřešil použitím dostupných tříd Vector, Hashtable a s tím související úpravou kódu (např. Set nepodporuje duplikáty, proto je po jeho nahrazení vektorem třeba kontrolovat, jestli vkládaný prvek již neobsahuje) Třída CanvasManager Třída CanvasManager (správce plátna) poskytuje metody pro správu plátna, vykreslovaných tvarů a umožňuje pomocí posluchačů zachytávat události uživatelského vstupu. V implementaci pro Java SE vytváří klasické okno JFrame a k zobrazování tvarů využívá objekt JPanel. Metody posluchačů pouze deleguje vytvořenému oknu. V implementaci pro Java ME jsem použil nízkoúrovňového přístupu, přičemž okno správce plátna nahrazuje třída odvozená od Canvas. Důsledkem bylo odstranění některých metod souvisejících s oknem, postrádajících v MIDP smysl. Jedná se o metody: setname(string name) getname() getx() 30

37 gety() getposition() setposition(int x, int y) setposition(position position) setvisible(boolean viditelné) Naopak jsem přidal metody getdisplayablewidth a getdisplayableheight, které vrací maximální zobrazitelnou velikost plátna v obrazových bodech. Použitý profil MIDP neumožňuje ukládat obrázky ani přistupovat k barevným hodnotám jednotlivých bodů, proto nebylo možné implementovat metodu saveaspicture. Další odlišnosti vznikly v posluchačích uživatelského vstupu. Původní knihovna používá klasické posluchače klávesnice a myši z Java SE, rozhraní KeyListener a MouseListener. Spravují se metodami: registerkeyboard(keylistener posluchač) registermouse(mouselistener posluchač) cancelkeyboard(keylistener posluchač) cancelmouse(mouselistener posluchač) V Java SE jsou vstupními zařízeními klávesnice a myš, v konfiguraci CLDC klávesnice mobilního zařízení a dotyková obrazovka. Z hlediska vyvolávaných událostí se dají zařízení uživatelského vstupu mobilních zařízení považovat za zjednodušenou verzi těch plnohodnotných, dostupných na stolních počítačích. Proto jsem ponechal názvy zmíněných metod shodné, liší se pouze předávanými parametry. Jedná se o rozhraní IKeyListener pro klávesnici mobilního telefonu a IPointerListener pro dotykovou obrazovku. Obě nabízejí standardní události dostupné třídě Canvas při použití nízkoúrovňového přístupu, podrobnější popis je uveden v jejich dokumentaci. S výše zmíněnými posluchači souvisí i další doplňující metody přidané správci plátna. Neobsahují žádnou funkcionalitu navíc, pouze volají příslušné protějšky objektu Canvas. Jejich seznam je následující: getgameaction(int keycode) getkeycode(int gameaction) getkeyname(int keycode) hasrepeatevents() haspointerevents() 31

38 haspointermotionevents() Vnitřní třídy MultiKeyListener a MultiPointerListener umožňují správci plátna obsloužit více zaregistrovaných posluchačů, ale to s sebou přináší i možné snížení výkonu aplikace procházením položek vektoru posluchačů při vyvolání každé události. Proto doporučuji použít pouze jednoho posluchače klávesnice respektive dotykové obrazovky. V takovém případě nebudou tyto třídy použity. Aplikaci využívající knihovny tvarů je možné vypnout volbou příkazu Konec na obrazovce správce plátna nebo Storno na kterémkoliv dialogu. Ukončení není provedeno automaticky, místo toho se zavolá metoda exitpressed rozhraní IExitListener. V těle této metody by měl programátor ukončit midlet voláním notifydestroyed. Nastavení posluchače IExitListener ve správci plátna se provádí metodou: setexitlistener(iexitlistener exitlistener) Kromě ukončení aplikace má zmíněný posluchač také za úkol předávat některým třídám knihovny objekt Display, jenž reprezentuje obrazovku spuštěného midletu. Proto je při jeho vytváření nutné implementovat i metodu getdisplay. Její volání umožňuje zobrazit plátno třídě CanvasManager (při registraci posluchače) a dialogové formuláře třídě IO Třída Painter Třída Painter (kreslítko) zajišťuje vykreslování jednotlivých tvarů. Její instanci získá tvar implementací metody draw rozhraní IPaintable. Kreslítko má k dispozici objekt Graphics, s jehož pomocí maluje obrysy tvarů, nebo je vyplňuje. V použité verzi MIDP však tento objekt nedisponuje požadovanou metodou ke kreslení a vyplňování trojúhelníku. Tento problém jsem vyřešil použitím knihovny JMicroPolygon [16]. Její třídy GeomUtils a PolygonGraphics jsou k dispozici v balíčku net.sourceforge.jmicropolygon. První z nich je knihovní třídou zajišťující některé početní operace pro druhou zmíněnou PolygonGraphics. Ta poskytuje následující metody: drawpolygon(graphics g, int[] xpoints, int[] ypoints) fillpolygon(graphics g, int[] xpoints, int[] ypoints) fillpolygon(graphics g, int[] xpoints, int[] ypoints, Stack stack) filltriangle(graphics g, int x0, int y0, int x1, int y1, int x2, int y2) Poslední filltriangle je použita kreslítkem k vyplňování trojúhelníku. Zbylé metody drawpolygon a fillpolygon jsou určené ke kreslení a vyplňování polygonu určeného vrcholy. 32

JAVA. Java Micro Edition

JAVA. Java Micro Edition JAVA Java Micro Edition Přehled předchůdci Personal Java (1997) Embeded Java (1998) definice JME přes JCP JCP Java Community Process JME není jeden balík SW sada technologií a specifikací definuje konfigurace

Více

(JME) Vybrané partie z jazyka Java (NPRG021) Jiří Tomeš

(JME) Vybrané partie z jazyka Java (NPRG021) Jiří Tomeš Java Micro Edition (JME) Vybrané partie z jazyka Java (NPRG021) Jiří Tomeš O čem se dnes budeme bavit O platformě JME Základní rozdělení JME CLDC MIDP MIDlet(y) a MIDLet suite Ukázky 2 programů IMP CDC

Více

J2ME. Java 2 Micro Edition. David Stach Ondřej Dušek

J2ME. Java 2 Micro Edition. David Stach Ondřej Dušek J2ME Java 2 Micro Edition David Stach Ondřej Dušek Historie počátky Java ME a Javy vůbec 1990 v Sun Microsystem návrh na vytvoření jazyka, použitelného pro domácí spotřebiče 1992 jazyk Oak (dub) 1995 zjištění,

Více

Technologie Java. Jaroslav Žáček jaroslav.zacek@osu.cz http://www1.osu.cz/~zacek/

Technologie Java. Jaroslav Žáček jaroslav.zacek@osu.cz http://www1.osu.cz/~zacek/ Technologie Java Jaroslav Žáček jaroslav.zacek@osu.cz http://www1.osu.cz/~zacek/ Trocha historie Java vznikla v roce 1995 jak minimalistický programovací jazyk (211 tříd). Syntaxe vycházela z C/C++. V

Více

Knihovna pro tvorbu GUI v mobilních zařízeních

Knihovna pro tvorbu GUI v mobilních zařízeních Masarykova univerzita, Fakulta informatiky Knihovna pro tvorbu GUI v mobilních zařízeních Vojtěch Štursa Diplomová práce Brno 2008 Prohlášení: Prohlašuji, že tato práce je mým původním autorským dílem,

Více

JSR 184 - tutorial 2 Transformace v JSR-184

JSR 184 - tutorial 2 Transformace v JSR-184 JSR 184 - tutorial 2 Transformace v JSR-184 Cíl tutorialu: - naučit vás měnit pozici/ rotaci/ velikost objektu Tak jdeme na to: V minulém tutorialu (Úvod do JSR-184) jsme si ukázali, jak námi vytvořenou

Více

JAVA. Java Micro Edition

JAVA. Java Micro Edition JAVA Java Micro Edition Přehled předchůdci Personal Java (1997) Embedded Java (1998) definice JME přes JCP JCP Java Community Process JME není jeden balík SW sada technologií a specifikací definuje konfigurace

Více

Teoretické minimum z PJV

Teoretické minimum z PJV Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov

Více

20. Projekt Domácí mediotéka

20. Projekt Domácí mediotéka Projekt Domácí mediotéka strana 211 20. Projekt Domácí mediotéka 20.1. Základní popis, zadání úkolu V projektu Domácí mediotéka (Dome) se jednoduchým způsobem evidují CD a videa. Projekt je velmi jednoduchý

Více

JSR 184 - tutorial 1 Úvod do JSR-184

JSR 184 - tutorial 1 Úvod do JSR-184 JSR 184 - tutorial 1 Úvod do JSR-184 Cíl tutorialu: - naučit vás načíst *.m3g soubor, vybrat z něho 1 objekt a vykreslit scénu Tak jdeme na to: Nejdříve si samozřejmě vytvoříme nový projekt. Já ho nazval

Více

Programování v Javě I. Únor 2009

Programování v Javě I. Únor 2009 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Únor 2009 Radek Kočí Seminář Java Programování v Javě (1) 1/ 44 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

Barvy na počítači a grafické formáty

Barvy na počítači a grafické formáty Barvy na počítači a grafické formáty Hlavním atributem, který se používá při práci s obrazem či s grafickými formáty, je barva. Při práci s barvami je důležité určit základní množinu barev, se kterou budeme

Více

Programování v Javě I. Leden 2008

Programování v Javě I. Leden 2008 Seminář Java Programování v Javě I Radek Kočí Fakulta informačních technologií VUT Leden 2008 Radek Kočí Seminář Java Programování v Javě (1) 1/ 45 Téma přednášky Datové typy Deklarace třídy Modifikátory

Více

Postřehová hra. Zadání projektu. 1 Moje cíle

Postřehová hra. Zadání projektu. 1 Moje cíle Gymnázium, Praha 6, Arabská 16 předmět Programování, vyučující Tomáš Obdržálek Postřehová hra ročníkový projekt Matouš Jokl, 1E květen 2014 Obsah 1 Moje cíle...1 2 Kód...2 1.Objekty a ArrayList...2 2.Jpanel

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

NIO. Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha NIO Aplikační programování v Javě (BI-APJ) - 12 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Více

}w!"#$%&'()+,-./012345<ya

}w!#$%&'()+,-./012345<ya }w!"#$%&'()+,-./012345

Více

Obsah. Předmluva 13. 1. Začínáme: překlad, spuštění a ladění 27

Obsah. Předmluva 13. 1. Začínáme: překlad, spuštění a ladění 27 Obsah Předmluva 13 Předmluva k druhému vydání 13 Předmluva k prvnímu vydání 14 Pro koho je tato kniha určena 15 Co v této knize najdete? 16 Poznámky k platformě 18 Jiné knihy 19 Konvence používané v knize

Více

Projekty pro výuku programování v jazyce Java

Projekty pro výuku programování v jazyce Java JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH Pedagogická fakulta Katedra informatiky Akademický rok: 2006/2007 TEZE BAKALÁŘSKÉ PRÁCE Projekty pro výuku programování v jazyce Java Jméno: František Přinosil

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

MOBILNÍHO TELEFONU S BLUETOOTH

MOBILNÍHO TELEFONU S BLUETOOTH VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV INTELIGENTNÍCH SYSTÉMŮ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INTELLIGENT SYSTEMS OVLÁDÁNÍ DESKTOPOVÉ

Více

Principy objektově orientovaného programování

Principy objektově orientovaného programování Principy objektově orientovaného programování Třídy a objekty doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz C E T

Více

Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů

Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů Infrastruktura UML v UML Karel Richta listopad 2011 Richta: B101TMM - v UML 2 Superstruktura UML Směr pohledu na systém dle UML Diagramy popisující strukturu diagramy tříd, objektů, kompozitní struktury,

Více

PREPROCESOR POKRAČOVÁNÍ

PREPROCESOR POKRAČOVÁNÍ PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML Obsah přednášky Webové služby a XML Miroslav Beneš Co jsou to webové služby Architektura webových služeb SOAP SOAP a Java SOAP a PHP SOAP a C# Webové služby a XML 2 Co jsou to webové služby rozhraní k

Více

ACASYS-KS Komunikace v systému ACASYS

ACASYS-KS Komunikace v systému ACASYS Komunikace v systému ACASYS Programátorská příručka Verze 1.05 acasys-ks_ms_cz_105 AMiT, spol. s r. o. nepřejímá žádné záruky, pokud se týče obsahu této publikace a vyhrazuje si právo měnit obsah dokumentace

Více

Mobilní aplikace Novell Filr Stručný úvod

Mobilní aplikace Novell Filr Stručný úvod Mobilní aplikace Novell Filr Stručný úvod Únor 2016 Podporovaná mobilní zařízení Aplikace Novell Filr je podporována v následujících mobilních zařízeních: Telefony a tablety se systémem ios 8 novějším

Více

MAPOVÉ OKNO GSWEB. Nápověda. Pohyb v mapovém okně Výběr v mapovém okně. Panel Ovládání Panel Vrstvy. Tisk Přehledová mapa Redlining Přihlásit jako

MAPOVÉ OKNO GSWEB. Nápověda. Pohyb v mapovém okně Výběr v mapovém okně. Panel Ovládání Panel Vrstvy. Tisk Přehledová mapa Redlining Přihlásit jako GSWEB Nápověda 1. Mapové okno Pohyb v mapovém okně Výběr v mapovém okně 2. Ovládací panel a panel vrstev Panel Ovládání Panel Vrstvy 3. GSWeb - roletové menu Tisk Přehledová mapa Redlining Přihlásit jako

Více

Čipové karty Lekařská informatika

Čipové karty Lekařská informatika Čipové karty Lekařská informatika Následující kód je jednoduchou aplikací pro čipové karty, která po překladu vytváří prostor na kartě, nad kterým jsou prováděny jednotlivé operace a do kterého jsou ukládány

Více

14.4.1. Typický prvek kolekce pro české řazení

14.4.1. Typický prvek kolekce pro české řazení 14.4. Co všechno by měl mít typický prvek kolekce 177 Poznámka: Třídy BigInteger, BigDecimal a Date budou vysvětleny v částech [15./183, [16./185 a [18.1./204. 14.4.1. Typický prvek kolekce pro české řazení

Více

Vytváření a použití knihoven tříd

Vytváření a použití knihoven tříd Vytváření a použití knihoven tříd doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Prostory jmen motivace spolupráce

Více

Manuál k aplikaci FieldGIS v.2.27

Manuál k aplikaci FieldGIS v.2.27 Manuál k aplikaci FieldGIS v.2.27 Petr Pala Copyright 2008 CENIA, laboratoř GIS 1. Úvod 1. Systémové požadavky 2. Části základního okna aplikace 1. Menu 1.1. File 1.2. Tools 1.3. Hlavní lišta 2. Editor

Více

Java a Caché IV: Manipulace s objekty

Java a Caché IV: Manipulace s objekty 1 z 6 11.1.2007 11:13 přihlašovací jméno heslo Registrace Přihlásit články odkazy aktuality CZJUG konference o portálu přidejte se o nás Vyhledávání Text: najdi Oborový filtr J2ME J2SE J2EE Enterprise

Více

Funkce Chytrý dotyk. verze 1.4. A-61629_cs

Funkce Chytrý dotyk. verze 1.4. A-61629_cs Funkce Chytrý dotyk verze 1.4 A-61629_cs Používání funkce chytrého dotyku Obsah Přehled... 1 Spuštění funkce chytrého dotyku... 2 Používání funkce chytrého dotyku s výchozími čísly funkcí a předem definovanými

Více

Java aplety. Předávání parametrů z HTML

Java aplety. Předávání parametrů z HTML Java aplety Aplety jsou speciální formou Java aplikací - mohou být spouštěny z prostředí WWW prohlížeče. Aby je prohlížeč spustil, musíme vložit do HTML stránky potřebné příkazy:

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

M I S Y S - W E B. Intranet řešení systému MISYS. Verze 9.00. Příručka uživatele

M I S Y S - W E B. Intranet řešení systému MISYS. Verze 9.00. Příručka uživatele M I S Y S - W E B Intranet řešení systému MISYS Verze 9.00 Příručka uživatele GEPRO s.r.o. Září 2008 Copyright GEPRO s.r.o. 2008 Ochranné známky GEPRO spol. s r.o. KOKEŠ, MISYS Ochranné známky Microsoft

Více

Č.j. PPR-19172-118/ČJ-2013-990640 Praha 7.7.2014 Počet listů: 8

Č.j. PPR-19172-118/ČJ-2013-990640 Praha 7.7.2014 Počet listů: 8 POLICEJNÍ PREZIDIUM ČESKÉ REPUBLIKY Odbor veřejných zakázek Č.j. PPR-19172-118/ČJ-2013-990640 Praha 7.7.2014 Počet listů: 8 dle seznamu dodavatelů, kteří si vyzvedli zadávací dokumentaci kteří požádali

Více

Obrázek 6.14: Prohlížec nápovedy

Obrázek 6.14: Prohlížec nápovedy JavaHelp Základní popis systému JavaHelp Soucástí vetšiny interaktivních aplikací je nápoveda (help) aplikace v Jave nejsou výjimkou. Systém JavaHelp je napsaný v Jave a je urcený pro aplikace vytvárené

Více

MATURITNÍ PRÁCE dokumentace

MATURITNÍ PRÁCE dokumentace MATURITNÍ PRÁCE dokumentace Jídelníček SŠIEŘ pro Android Martin Bartoň školní rok: 2012/2013 obor: třída: Počítačové systémy PS4.A ABSTRAKT Práce je zaměřená na problematiku tvorby Android aplikací,

Více

Vladimír Mach. @vladimirmach 2. 1. 2013

Vladimír Mach. @vladimirmach 2. 1. 2013 Vladimír Mach @vladimirmach 2. 1. 2013 SQL Server Compact Edition Jednoduchá relační databáze Použití i v malých zařízeních s omezenými zdroji Dříve pod názvem SQL Server Mobile Časté využití při programování

Více

MS ACCESS A MS WORD V KAŽDODENNÍ PRAXI

MS ACCESS A MS WORD V KAŽDODENNÍ PRAXI MS ACCESS A MS WORD V KAŽDODENNÍ PRAXI Martin Fussek VL Servis s.r.o., Ruská 24/83, 706 02 Ostrava Vítkovice, fussek@lahvarna.cz Abstrakt Příspěvek volně navazuje na můj příspěvek na TS 1999, přičemž nyní

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

DUM 01 téma: Úvod do Corelu

DUM 01 téma: Úvod do Corelu DUM 01 téma: Úvod do Corelu ze sady: 1 tematický okruh sady: Vektorová grafika ze šablony: 09 Počítačová grafika určeno pro: 2. ročník vzdělávací obor: vzdělávací oblast: číslo projektu: anotace: metodika:

Více

typová konverze typová inference

typová konverze typová inference Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie

Více

Generické programování

Generické programování Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =

Více

MapleCloud a jeho použ ití. Vladimír Žák

MapleCloud a jeho použ ití. Vladimír Žák MapleCloud a jeho použ ití Vladimír Žák Brno, 2015 Obsah 1 Úvod... 4 2 Novinky v MapleCloud pro Maple 2015... 5 3 MapleCloud a registrace... 6 4 Použití MapleCloud přímo z Maple 2015... 7 4.1 Popis jednotlivých

Více

UZ modul VVISION poslední změna 1. 3. 2013

UZ modul VVISION poslední změna 1. 3. 2013 UZ modul VVISION poslední změna 1. 3. 2013 Obsah 1 Základní popis... - 2-1.1 Popis aplikace... - 2-1.2 Zdroje obrazových dat... - 2-1.3 Uložení dat... - 2-1.4 Funkcionalita... - 2-1.4.1 Základní soubor

Více

8 Třídy, objekty, metody, předávání argumentů metod

8 Třídy, objekty, metody, předávání argumentů metod 8 Třídy, objekty, metody, předávání argumentů metod Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost třídám a objektům, instančním

Více

Ostatní portálové aplikace

Ostatní portálové aplikace Univerzitní informační systém Panevropská vysoká škola Ostatní portálové aplikace Svazek 9 Verze: 1.20 Datum: 10. března 2016 Autor: Jitka Šedá, Martin Tyllich Obsah Seznam obrázků 5 1 Helpdesk pro UIS

Více

Programování v jazyku C# II. 4.kapitola

Programování v jazyku C# II. 4.kapitola Programování v jazyku C# II. 4.kapitola Obsah GDI + Vlastní kontrolky 2/37 GDI+ Graphics Device Interface Služba Windows framework poskytuje obalující třídy Umožňuje programování 2D grafiky bez znalosti

Více

Komponenty v.net. Obsah přednášky

Komponenty v.net. Obsah přednášky doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Rozdíl mezi COM a.net Distribuce komponent Programování

Více

2 Grafický výstup s využitím knihovny

2 Grafický výstup s využitím knihovny 2 Grafický výstup s využitím knihovny Studijní cíl Tento blok je věnován základním principům při vytváření grafického výstupu pomocí standardních metod, které poskytuje grafické rozhraní. V textu budou

Více

NUR. Simple Terminal and SmartTV [NVS-STS] Vypracovává. Pod vedením Ing. Miroslav Macík. Adam Lysák, Jiří Troup 28.12.2014

NUR. Simple Terminal and SmartTV [NVS-STS] Vypracovává. Pod vedením Ing. Miroslav Macík. Adam Lysák, Jiří Troup 28.12.2014 NUR [NVS-STS] Simple Terminal and SmartTV D4 Vypracovává Adam Lysák, Jiří Troup Pod vedením Ing. Miroslav Macík 28.12.2014 1. Prototyp Původně jsme uvažovali o vytvoření fyzického zařízení, které by přimo

Více

Návrh aplikace. Project Westpon. Inteligentní simulátor budov. Martin Mudra, Jan Smejkal, Onřej Macoszek, Marek Žehra, Jiří Slivárich

Návrh aplikace. Project Westpon. Inteligentní simulátor budov. Martin Mudra, Jan Smejkal, Onřej Macoszek, Marek Žehra, Jiří Slivárich Návrh aplikace Project Westpon Inteligentní simulátor budov Martin Mudra, Jan Smejkal, Onřej Macoszek, Marek Žehra, Jiří Slivárich . Úvod.. Účel dokumentu Tento dokument má za účel detailně popsat návrh

Více

XML Š ABLONY A JEJICH INTEGRACE V LCMS XML TEMPLATES AND THEIN INTEGRATION IN LCMS

XML Š ABLONY A JEJICH INTEGRACE V LCMS XML TEMPLATES AND THEIN INTEGRATION IN LCMS XML Š ABLONY A JEJICH INTEGRACE V LCMS XML TEMPLATES AND THEIN INTEGRATION IN LCMS Roman MALO - Arnošt MOTYČKA This paper is oriented to discussion about using markup language XML and its features in LCMS

Více

Java Výjimky Java, zimní semestr

Java Výjimky Java, zimní semestr Java Výjimky 1 Výjimky (exceptions) hlášení a ošetření chyb výjimka signalizuje nějaký chybový stav výjimka = instance třídy java.lang.throwable dvě podtřídy java.lang.error a java.lang.exception konkrétní

Více

MAWIS. Uživatelská dokumentace

MAWIS. Uživatelská dokumentace MAWIS Uživatelská dokumentace Verze 27-11-2008 OBSAH OBSAH... 2 1) O MAPOVÉM SERVERU... 3 2) POTŘEBNÁ NASTAVENÍ... 3 Hardwarové požadavky... 3 Softwarové požadavky... 3 Nastavení Internet Exploreru:...

Více

Fotogalerie pro redakční systém Marwel Obscura v. 2.0

Fotogalerie pro redakční systém Marwel Obscura v. 2.0 Fotogalerie pro redakční systém Marwel Obscura v. 2.0 postupy a doporučení pro práci redaktorů verze manuálu: 1.1 QCM, s. r. o., březen 2011 Podpora: e-mail: podpora@qcm.cz tel.: +420 538 702 705 Obsah

Více

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV) Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Enterprise Java

Více

12. Základy HTML a formuláře v HTML

12. Základy HTML a formuláře v HTML 12. Základy HTML a formuláře v HTML 1) Co je to HTML a historie HTML 2) Termíny v HTML a. tag b. značka c. element d. atribut e. entita 3) specifikace a. html, xhtmll b. rozdíly xhtml a html 4) struktura

Více

Instalujeme a zakládáme databázi Oracle Database 11g

Instalujeme a zakládáme databázi Oracle Database 11g KAPITOLA 2 Instalujeme a zakládáme databázi Oracle Database 11g Protože se instalace systému Oracle s každou novou verzí zjednodušuje, stojí uživatel před pokušením otevřít krabici s médii a ihned začít

Více

Statistica, kdo je kdo?

Statistica, kdo je kdo? Statistica, kdo je kdo? Newsletter Statistica ACADEMY Téma: Typy instalací Typ článku: Teorie Někteří z vás používají univerzitní licence, někteří síťové, podnikové atd. V tomto článku Vám představíme,

Více

Java - Kresba. 2/28/11 1/8 Java - kresba

Java - Kresba. 2/28/11 1/8 Java - kresba Java - Kresba Základní entity a jejich kresba ve třídě Graphics nemůžeme nastavit linii, šířku a typ, z grafických atributů jí můžeme nastavit pouze barvu Linie (čára)... drawline(int x1, int y1, int x2,

Více

Programovací software Oblast režimů Oblast nástrojů Složka aplikací pro různé funkce: Oblast tlačítek Tlačítko Loading (Načítání)

Programovací software Oblast režimů Oblast nástrojů Složka aplikací pro různé funkce: Oblast tlačítek Tlačítko Loading (Načítání) Programovací software 1. Struktura funkcí myši ErgoMedia 500 Hlavní obrazovka struktury funkcí Zobrazuje programované klávesy. Hlavní obrazovka myši ErgoMedia 500: Oblast režimů K dispozici jsou čtyři

Více

SYSTÉM PRO KONFIGURACI KOMUNIKAČNÍCH TERMINÁLŮ A VIZUALIZACI STAVOVÝCH DAT Z KOLEJOVÝCH VOZIDEL

SYSTÉM PRO KONFIGURACI KOMUNIKAČNÍCH TERMINÁLŮ A VIZUALIZACI STAVOVÝCH DAT Z KOLEJOVÝCH VOZIDEL SYSTÉM PRO KONFIGURACI KOMUNIKAČNÍCH TERMINÁLŮ A VIZUALIZACI STAVOVÝCH DAT Z KOLEJOVÝCH VOZIDEL SYSTEM FOR CONFIGURATION OF COMMUNICATION TERMINALS AND VISUALIZATION OF STATE INFORMATION FROM RAIL VEHICLES

Více

programování formulářů Windows

programování formulářů Windows C# a WinForms programování formulářů Windows M i c r o s o f t. N E T D e v e l o p m e n t S e r i e s Chris Sells Microsoft.NET Development Series Windows Forms Programming in C# Authorized translation

Více

Zajištění kvality služby (QoS) v operačním systému Windows

Zajištění kvality služby (QoS) v operačním systému Windows VŠB TU Ostrava Směrované a přepínané sítě Zajištění kvality služby (QoS) v operačním systému Windows Teoretické možnosti aplikace mechanismů zabezpečení kvality služby (QoS) v nových verzích MS Windows

Více

11. Dědičnost. Dědičnost strana 103

11. Dědičnost. Dědičnost strana 103 Dědičnost strana 103 11. Dědičnost V této kapitole si vysvětlíme jeden ze základních pojmů objektově orientovaného programování dědičnost (inheritance). S ní souvisejí i následující témata: předek a potomek

Více

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text()); Anotace a Hibernate Aleš Nosek, Ondřej Vadinský, Daniel Krátký Anotace v Javě Anotace jsou novinkou v Javy verze 5. Anotace umožňují doplnit kód Javy o dodatečné informace. Zapisují se přímo do zdrojového

Více

Úvod...12 Součásti aplikace... 12 Použité konvence... 13

Úvod...12 Součásti aplikace... 12 Použité konvence... 13 Obsah 1 2 Úvod...12 Součásti aplikace... 12 Použité konvence... 13 1. Instalace a nastavení...15 1.1 Než začnete instalovat... 16 1.2 Instalace... 16 Průběh... 17 1.3 Oprava instalace... 18 1.4 Odinstalování

Více

Automatizovaný systém velení a řízení pro malé jednotky. Automated command and control system for the small units

Automatizovaný systém velení a řízení pro malé jednotky. Automated command and control system for the small units Univerzita obrany Fakulta ekonomiky a managementu Katedra vojenského managementu a taktiky Softwarová dokumentace Automatizovaný systém velení a řízení pro malé jednotky Automated command and control system

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

Ostatní portálové aplikace

Ostatní portálové aplikace Univerzitní informační systém Slovenská zemědělská univerzita v Nitře Ostatní portálové aplikace Svazek 9 Verze: 1.20 Datum: 10. března 2016 Autor: Jitka Šedá, Martin Tyllich Obsah Seznam obrázků 5 1

Více

Uživatelská příručka. BlackBerry 8700 Smartphone

Uživatelská příručka. BlackBerry 8700 Smartphone Uživatelská příručka BlackBerry 8700 Smartphone SWD-280428-0212105034-010 Obsah Základní informace o řadě BlackBerry...9 Přepínání aplikací...9 Přiřazení aplikace tlačítku Komfort...9 Nastavení informací

Více

Elektronická spisová služba

Elektronická spisová služba Univerzitní informační systém Univerzita Konštantína Filozofa v Nitre Elektronická spisová služba Svazek 19 Verze: 0.49 Datum: 11. března 2016 Autor: Jitka Šedá, Martin Tyllich Obsah Seznam obrázků 5

Více

MT201. 0LQLDWXUQtSURJUDPRYDWHOQêWHUPLQiO 8åLYDWHOVNiStUXþND 070,1,$7851Ë7(50,1È/VWUDQ

MT201. 0LQLDWXUQtSURJUDPRYDWHOQêWHUPLQiO 8åLYDWHOVNiStUXþND 070,1,$7851Ë7(50,1È/VWUDQ MT201 0LQLDWXUQtSURJUDPRYDWHOQêWHUPLQiO 8åLYDWHOVNiStUXþND MT201 MINIATURNÍ PROGRAMOVATELNÝ TERMINÁL Uživatelská pøíruèka edice 01.2007 MICROPEL s.r.o. 2007 http://www.micropel.cz 1.verze dokumentu OBSAH

Více

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní Základy jazyka C# doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah přednášky Architektura.NET Historie Vlastnosti

Více

[APLIKACE PRO PŘEHRÁVÁNÍ VIDEA - PROJEKT MIAMI]

[APLIKACE PRO PŘEHRÁVÁNÍ VIDEA - PROJEKT MIAMI] [APLIKACE PRO PŘEHRÁVÁNÍ VIDEA - PROJEKT MIAMI] [Aktualizace dokumentu: 3.9.2011 9:49:00 Verze dokumentu: 2.2 Obsah Obsah... 2 1. Struktura aplikace... 3 2. Registrace aplikace na serveru a první start

Více

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance

Více

Uživatelská příručka

Uživatelská příručka Uživatelská příručka PC výkaznictví JASU (program pro zpracování účetního výkaznictví) březen 2012 Dodavatel: MÚZO Praha s.r.o. Politických vězňů 15 P.O.Box 36 111 21 Praha 1 telefon: 224 091 619 fax:

Více

Universal Serial Bus. Téma 12: USB. Komunikační principy Enumerace Standardní třídy zařízení

Universal Serial Bus. Téma 12: USB. Komunikační principy Enumerace Standardní třídy zařízení Universal Serial Bus Téma 12: USB Komunikační principy Enumerace Standardní třídy zařízení Obecné charakteristiky distribuovaná datová pro připojení počítačových periferií klávesnice, myš, Flash disk,

Více

P-334U. Bezdrátový Wi-Fi router kompatibilní s normou 802.11a/g. Příručka k rychlé instalaci

P-334U. Bezdrátový Wi-Fi router kompatibilní s normou 802.11a/g. Příručka k rychlé instalaci P-334U Bezdrátový Wi-Fi router kompatibilní s normou 802.11a/g Příručka k rychlé instalaci Verze 3.60 1. vydání 5/2006 Přehled P-334U představuje bezdrátový širokopásmový router (podporující normy IEEE

Více

Manuál k aplikaci SDO PILOT v.0.2

Manuál k aplikaci SDO PILOT v.0.2 Manuál k aplikaci SDO PILOT v.0.2 Základní informace o aplikaci Aplikace slouží pro zjednodušené vytváření dokumentů Souhrnů doporučených opatření pro Evropsky významné lokality. Vznikala přírustkovým

Více

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní) Příklad aplikace Klient/Server s Boss/Worker modelem (informativní) Jan Faigl Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze A0B36PR2 Programování 2 Jan Faigl, 2015 A0B36PR2

Více

MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ

MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ MANUÁL MOBILNÍ APLIKACE GOLEM PRO OPERAČNÍ SYSTÉM ANDROID 4.X A VYŠŠÍ 1 OBSAH 1.Popis... 3 2.Ovládání aplikace...3 3.Základní pojmy... 3 3.1.Karta...3 3.2.Čtečka...3 3.3.Skupina...3 3.4.Kalendář...3 3.5.Volný

Více

Java a XML. 10/26/09 1/7 Java a XML

Java a XML. 10/26/09 1/7 Java a XML Java a XML Java i XML jsou přenositelné V javě existuje podpora pro práci s XML, nejčastější akce prováděné při zpracování XML: načítání XML elementů generování nových elementů nebo úprava starého zápis

Více

KAPITOLA 13. Grafika a zvuk. Linux a grafika

KAPITOLA 13. Grafika a zvuk. Linux a grafika KAPITOLA 13 Grafika a zvuk Mnoho aspektů profesionálního programování vyžaduje pokročilou podporu grafiky a zvuku. Vše od vytváření matematických modelů až po psaní nejnovějších akčních her vyžaduje schopnost

Více

N e j č a s t ě j š í d o t a z y k e k u k i t V

N e j č a s t ě j š í d o t a z y k e k u k i t V Nejčastější dotazy ke Kuki TV Nejčastější otázky a odpovědi ke Kuki TV Tvoje otázka? 1. Jak dlouho trvá vyexpedování STB Kuki? Set-top boxy ke službě Kuki expedujeme zpravidla do 3 (pracovních) dnů od

Více

MyIO - webový komunikátor

MyIO - webový komunikátor MyIO - webový komunikátor Technická příručka verze dokumentu 1.0 FW verze modulu 1.4-1 - Obsah 1 MyIO modul... 3 2 Lokální webové rozhraní... 3 2.1 Start, první přihlášení... 3 2.2 Home úvodní strana MyIO...

Více

Filr 2.0 Uživatelská příručka k aplikaci Filr Web. Únor 2016

Filr 2.0 Uživatelská příručka k aplikaci Filr Web. Únor 2016 Filr 2.0 Uživatelská příručka k aplikaci Filr Web Únor 2016 Právní vyrozumění Informace o právních upozorněních, ochranných známkách, prohlášeních o omezení odpovědnosti, zárukách, omezeních exportu a

Více

RMI - Distribuované objekty v Javě

RMI - Distribuované objekty v Javě Vysoká škola báňská - Technická univerzita Ostrava 30. března 2009 Osnova Co je to RMI? 1 Co je to RMI? 2 Vnější pohled Vrstvy RMI Stub & Skeletons Layer Remote Reference Layer Transport Layer Pojemnování

Více

7. Datové typy v Javě

7. Datové typy v Javě 7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů

Více

Ovladač Fiery Driver pro systém Mac OS

Ovladač Fiery Driver pro systém Mac OS 2016 Electronics For Imaging, Inc. Informace obsažené v této publikaci jsou zahrnuty v Právní oznámení pro tento produkt. 30. května 2016 Obsah Ovladač Fiery Driver pro systém Mac OS Obsah 3...5 Fiery

Více

Obrázky. Tag Význam Párový Výskyt. img obrázek ne. img video ne. map klikací mapa. area oblast v klikací mapě ne

Obrázky. Tag Význam Párový Výskyt. img obrázek ne. img video ne. map klikací mapa. area oblast v klikací mapě ne Obrázky Tag Význam Párový Výskyt img obrázek ne img video ne map klikací mapa ano area oblast v klikací mapě ne Img Obrázek (angl. image). Nepárový tag. Do stránky se vloží obrázek načtený z jiného

Více

2N Helios IP HTTP API

2N Helios IP HTTP API 2N Helios IP HTTP API Dveřní komunikátor Konfigurační manuál Firmware Verze 2.6 2.6.0 www.2n.cz Společnost 2N TELEKOMUNIKACE a.s. je českým výrobcem a dodavatelem telekomunikační techniky. K produktovým

Více

Využití J2ME při vývoji telemedicínských aplikací pro klasické mobilní telefony

Využití J2ME při vývoji telemedicínských aplikací pro klasické mobilní telefony Využití J2ME při vývoji telemedicínských aplikací pro klasické mobilní telefony Josef Špidlen EuroMISE centrum Kardio, Ústav informatiky AV ČR Pod Vodárenskou věží 2, 182 00 Praha 8 spidlen@euromise.cz

Více

RMI Remote Method Invocation

RMI Remote Method Invocation 2. cvičení RMI Remote Method Invocation 2007/09 ver.2.0 1 RMI co to je? vyvolání metody z jiné JVM lokalizace vzdáleného objektu komunikace se vzdálenými objekty přenos objektu v bytecode typicky klient

Více

Práce s velkými sestavami

Práce s velkými sestavami Práce s velkými sestavami Číslo publikace spse01650 Práce s velkými sestavami Číslo publikace spse01650 Poznámky a omezení vlastnických práv Tento software a související dokumentace je majetkem společnosti

Více