2 Tvorba interaktivních grafických programů

Podobné dokumenty
Java GUI události. Událostmi řízené programování. Zpracování = obsluha událostí

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

Události. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Úloha 1. Text úlohy. Vyberte jednu z nabízených možností: NEPRAVDA. PRAVDA Úloha 2. Text úlohy

7 Transformace 2D. 7.1 Transformace objektů obecně. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

01_Grafické rozhraní

GUI v Javě a událostmi řízené programování

GUI v Javě a událostmi řízené programování

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

GUI v Javě a událostmi řízené programování

GUI v Javě (připomínka) Návrhář GUI Příklad aplikace MVC Model-View-Controller Události Vnitřní třídy. MVC Model-View-Controller

Obsah přednášky. GUI v Javě a událostmi řízené programování. Základní prvky grafického rozhraní. Základní komponenty.

Nápověda k používání mapové aplikace Katastrální mapy Obsah

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Jan Boháček [ÚLOHA 27 NÁSTROJE KRESLENÍ]

1. Úvod do obsluhy AutoCADu

13 Barvy a úpravy rastrového

Rasterizace je proces při kterém se vektorově definovaná grafika konvertuje na. x 2 x 1

Nejzajímavější jsou události MouseDown a KeyDown.

Úvod do počítačových sítí

Kreslení úseček a křivek

VÝUKA PČ NA 2. STUPNI základy technického modelování. Kreslící a modelovací nástroje objekty, čáry

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Jan Boháček [ÚLOHA 31 - KÓTOVÁNÍ]

TÉMATICKÝ OKRUH Softwarové inženýrství

Podmíněné vykonávání

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

CORELDRAW SEZNÁMENÍ S PROGRAMEM. Lenka Bednaříková

DUM 03 téma: Tvary - objekty

6 Příkazy řízení toku

Popis ovládání aplikace - Mapový klient KÚPK

Uživatelský manuál SŘHV Online WEB rozhraní pro ZÁKAZNÍKY Srpen 2015 verze 1. 0 VÍTKOVICE STEEL, a.s. vitkovicesteel.com

BARVY. Příkaz barva. Barvy TrueColor. Se objeví dialogové okno

Jak namalovat obraz v programu Malování

Jak namalovat obraz v programu Malování

Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě

4. cvičení. 15. října 2014

František Hudek. listopad 2012

INFORMATIKA PRO ZŠ. Ing. Veronika Šolcová

Prostředí Microstationu a jeho nastavení. Nastavení výkresu

Výhody programu OCAD

12 Metody snižování barevného prostoru

Mapové služby portálu veřejné správy České republiky a IRZ. Průvodce po mapové aplikaci

WINDOWS 7 ZÁKLADY. Na konci roku 2012 přišly na trh nové Windows 8, které revolučně mění ovládání a jsou orientovány především na dotykové ovládání.

DUM 18 téma: Cesty a jejich užití v prostředí Gimp

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

PŘÍLOHY SEZNAM PŘÍLOH:

Strategie ochrany před negativními dopady povodní a erozními jevy přírodě blízkými opatřeními v České republice

9. Práce s naskenovanými mapami

Téma: Práce se základními objekty, výplní a obrysem

ELEKTRONICKÝ DIGITÁLNÍ

Programování v jazyku LOGO - úvod

SignEditor 1 - návod k použití

Pokyny pro žáky k testování písemné zkoušky na počítači

Systém pro podávání připomínek a námitek ke konceptu Územního plánu hl. m. Prahy

Zobrazování bannerů podporují pouze nově vytvořené šablony motivů vzhledu.

1 Uživatelská dokumentace

2017 CARAT "New design"

1. Dědičnost a polymorfismus

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

Nastavení stránky : Levým tlačítkem myši kliknete v menu na Soubor a pak na Stránka. Ovládání Open Office.org Draw Ukládání dokumentu :

10 Balíčky, grafické znázornění tříd, základy zapozdření

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

František Hudek. leden Informační a komunikační technologie ZONER Práce s textem. Tvorba a editace odstavcového a uměleckého textu.

Aplikace s grafickým uživatelským rozhraním

11 Zobrazování objektů 3D grafiky

OPERAČNÍ SYSTÉM. základní ovládání. Mgr. Jan Veverka Střední odborná škola sociální obor ošetřovatel

COREL PHOTO-PAINT SEZNÁMENÍ S PROGRAMEM. Lenka Bednaříková

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Aleš Najman [ÚLOHA 28 NÁSTROJE EDITACE ]

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Manuál SW lokalizace problémů a hodnot v dynamické mapě

Zobrazovací jednotky a monitory

Popis základního prostředí programu AutoCAD

POČÍTAČOVÁ GRAFIKA VEKTOROVÁ GRAFIKA VÍCENÁSOBNÉ KOPÍROVÁNÍ

MRBT. Stacionární průmyslový robot EPSON C3 aplikace pro prezentaci

Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky. PORTÁL KUDY KAM. Manuál pro editaci ŽS. Verze 1.

Odborný garant: Doc. Ing. Miroslav Píška, CSc.

Vytvoření tabulky: V následujícím okně si editujete okno tabulky. Vyzkoušejte si viz podklad Cv_09_Podklad_tabulka.xls a Cv_09_Tabulka.dwg.

Uživatelská příručka internetové aplikace

Práce s plátnem. Vrácení se o krok zpět CTRL+Z Vrácení se o krok vpřed SHIFT+CTRL+Z Duplikace objektu CTRL+D

Základní grafika. Princip zobrazování obsahu. Grafický kontext. Zobrazovací metody. Přednáška 3

Comenius Logo. Princip programování. Prostředí Comenius Logo

Tisk výkresu. Projekt SIPVZ 2006 Řešené příklady AutoCADu Autor: ing. Laďka Krejčí

Třída DrawingTool. Obrázek 1: Prázdné okno připravené pro kreslení

Téma: Vektorová grafika. Určete pravdivost následujícího tvrzení: "Grafická data jsou u 2D vektorové grafiky uložena ve voxelech."

Verze: Červen 2017 verze 14 1/ 11

CAD_Inventor -cvičení k modelování a tvorbě technické obrazové dokumentace Vytváření výrobního výkresu rotační součásti - hřídele

Využití ICT techniky především v uměleckém vzdělávání. Akademie - VOŠ, Gymn. a SOŠUP Světlá nad Sázavou

3D sledování pozice vojáka v zastavěném prostoru a budově

Zvyšování kvality výuky technických oborů

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

5 Algoritmy vyplňování 2D oblastí

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Radek Havlík [ÚLOHA 32 ODKAZY A TEXTY]

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

Postup k obsluze portálu O2 Delivery Desk

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

Otázky neopisuj, piš odpověď!

METODICKÝ POKYN PRÁCE S MS Word MÍRNĚ POKROČILÍ. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

Transkript:

2 Tvorba interaktivních grafických programů Studijní cíl Tento blok je věnován vytváření interaktivních grafických programů. Podrobně bude vysvětleno, jakým způsobem je možno programově reagovat na události myši a klávesnice. Jedná se především o zjištění aktuální polohy myši, detekci pohybu, detekci stisknutí a uvolnění tlačítka myši, rozlišení události od levého nebo pravého tlačítka myši a další. Doba nutná k nastudování 4 hodiny Průvodce studiem Při studiu tohoto bloku se předpokládá, že student ovládá základy programování v jazyce Java a je schopen vytvářet jednoduché aplikace s využitím grafického uživatelského rozhraní a jednoduché grafické programy s využitím standardních grafických metod třídy Graphics. 2.1 Interaktivní grafika V předchozích dvou blocích bylo vysvětleno jak vytvářet aplikace s využitím grafického uživatelského rozhraní a jak realizovat vlastní grafický výstup na výstupním zařízení (monitoru). Co však doposud těmto programům chybí je možnost reagovat na události myši a klávesnice. Přitom některé grafické úlohy jsou na této interaktivitě přímo založeny. Jedná se například o možnost zadat pomocí kliknutí a tažení myší počáteční a koncový bod úsečky, vyznačit určitou oblast rastrového obrázku, která bude následně modifikována, získat barvu z určitého pixelu v rastrovém obrázku, definovat nebo modifikovat řídící body křivky, která má být vykreslena, zobrazovat souřadnice kurzoru myši atd. K vyřešení těchto úloh je třeba dokázat detekovat jednotlivé události, které souvisí s činností myši, případně i klávesnice a dokázat na ně adekvátním způsobem reagovat. KST/IPOGR 1-1 Petr Veselý

2.2 Události myši Jak bylo naznačeno v bloku 1, k jednotlivým událostem vždy existuje tzv. posluchač (Listener), což je Třída, která implementuje příslušné rozhraní a tuto třídu je potřeba zaregistrovat u příslušné komponenty, jejíž určitou událost je třeba monitorovat. Princip detekování událostí, souvisejících s činností myši, je stejný jako u událostí souvisejících s akcemi okna, respektive komponenty. Při práci s myši jsou k dispozici události MouseEvent reaguje na události stisku a uvolnění tlačítek myši, případně umístění kurzoru myši nad plochy komponenty MouseMotionEvent reaguje na události související s pohybem myši MouseWheelEvent reaguje na práci s kolečkem myši Pro každou z uvedených událostí je k dispozici odpovídající listener (respektive objekt implementující odpovídající rozhraní) a každá událost má vlastní sadu obslužných metod pro jednotlivé činnosti. 2.2.1 Práce s tlačítky myši Událost MouseEvent Rozhraní MouseListener Obslužné metody: mouseclicked() obsluha kliknutí (stisk a uvolnění levého tlačítka myši) mouseentered() obsluha vstupu kurzoru myši nad plochu komponenty mouseexited() obsluha události, kdy kurzor myši opustí plochu komponenty mousepressed() obsluha události stisknutí tlačítka myši mousereleased() obsluha uvolnění tlačítka myši 2.2.2 Pohyb myši Událost MouseMotionEvent Rozhraní MouseMotionListener KST/IPOGR 1-2 Petr Veselý

Obslužné metody: mousemotiondragged() obsluha události tažení myší (pohyb se stisknutým tlačítkem) mousemotionmoved() obsluha pohybu myši, pokud není stisknuto žádné tlačítko 2.2.3 Práce s rolovacím kolečkem myši Událost MouseWheelEvent Rozhraní MouseWheelListener Obslužné metody: mousewheelmoved() obsluha otočení rolovacím kolečkem myši 2.3 Registrování posluchače Existují dvě možnosti, jak zaregistrovat pro danou komponentu příslušného posluchače. V následujícím příkladu budeme registrovat posluchače pro události myši, proto použijeme metodu addmouselistener() a jako parametr uvedeme buď instanci třídy MouseListener nebo MouseAdapter(). 2.3.1 Varianta Listener V tomto případě je potřeba implementovat všechny metody rozhraní daného posluchače. To se jeví jako nevýhoda především tehdy, pokud registrujeme posluchače s více metodami v rozhraní a přitom plánujeme použít pouze některé z nich. V následujícím kódu je ukázka situace, kdy cílem je vykreslit kružnici o poloměru 10 pixelů tak, aby její střed byl v místě kliknutí libovolným tlačítkem myši. Při registraci byl použit příslušný listener (MouseListener) a kromě smysluplné implementace obslužné metody MousePresed bylo nutné zcela zbytečně (prázdný příkaz) implementovat i všechny zbývající metody rozhraní. KST/IPOGR 1-3 Petr Veselý

addmouselistener(new MouseListener() { ) public void mouseclicked(mouseevent e) { public void mousepressed(mouseevent e) { g.drawoval(e.getx()-10, e.gety()-10, 20, 20) public void mousereleased(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { Kód 1: Použití třídy XXXListener při registraci posluchače 2.3.2 Varianta Adapter V tomto případě stačí implementovat pouze jednu nebo více požadovaných metod rozhraní daného posluchače. Třída MouseAdapter již implementovala všechny metody rozhraní (prázdné tělo). To je výhodné tehdy, pokud jako v tomto případě potřebujeme obsluhu pouze jedné události. addmouselistener(new MouseAdapter() { ) @Override public void mousepressed(mouseevent e) { g.drawoval(e.getx()-10, e.gety()-10, 20, 20) Kód 2: Použití třídy XXXAdapter při registraci posluchače KST/IPOGR 1-4 Petr Veselý

2.4 Parametr obslužných metod Jednotlivé obslužné metody mají jeden parametr, jehož typ se liší podle typu posluchače (události). Pro události myši MouseEevent a MouseMotionEvent je použit typ parametru MouseEvent, případně pro událost MouseWheelEvenet je to parametr typu WheelEvent. Tento parametr obsahuje důležité informace o poloze myši, kde se událost stala, stisknutém tlačítku, které událost vyvolalo, případně o směru otočení rolovacího kolečka. Důležité metody: getx(), gety(), getpoint() určují polohu kurzoru myši v okamžiku události getbutton() specifikují tlačítko, které událost vyvolalo getmodifiers(), getmodifiersex() určují, jaký je stav dalších tlačítek myši isaltdown(), iscontroldown(), isshiftdown() určují, zda v okamžiku události byly stisknuty klávesy Alt, Control nebo Shift. 2.5 Příklady 2.5.1 Zobrazení polohu myši při každém jejím pohybu Souřadnice jsou zjištěny pomocí metody getx() a gety() parametru typu MouseEvent. Následně jsou převedeny do textové podoby a zobrazeny jako text v příslušné komponentě typu JLabel. private void formmousemoved(mouseevent e) { labelsouradnice.settext(e.getx() + " : " + e.gety()) Kód 3: Ukázka zobrazení souřadnic myši 2.5.2 Rozlišení pravého a levého tlačítka myši Větvení je provedeno na základě návratové hodnoty metody getbutton(), která může nabývat hodnot MouseEvent.BUTTON1 (levé tlačítko), KST/IPOGR 1-5 Petr Veselý

MouseEvent.BUTTON2 (střední tlačítko) nebo MouseEvent.BUTTON3 (pravé tlačítko). Dle tlačítka se vykreslí buď kružnice nebo čtverec. private void formmousepressed(mouseevent e) { switch (e.getbutton()) { case MouseEvent.BUTTON1 : g.drawoval(e.getx()-10, e.gety()-10, 20, 20) break case MouseEvent.BUTTON3 : g.drawrect(e.getx()-10, e.gety()-10, 20, 20) break g.dispose() Kód 4: Ukázka volby dle tlačítka 2.5.3 Rozlišení klávesy CTRL Větvení je provedeno na základě návratové hodnoty metody iscontroldown(). Pokud byla během stisknutí libovolného tlačítka myši již stisknuta klávesa CTRL, kreslí se kružnice, jinak se vykreslí kruh. private void formmousepressed(mouseevent e) { if (evt.iscontroldown()) { g.drawoval(e.getx()-10, e.gety()-10, 20, 20) else { break g.filloval(e.getx()-10, e.gety()-10, 20, 20) g.dispose() Kód 5: Ukázka volby dle klávesy CTRL 2.5.4 Kontrola tlačítek myši při události tažení Při tažení se stisknutým středním tlačítkem je kreslena volná čára od ruky. Vždy při každém posunu je vykreslena úsečka od minulé pozice myši. Při události tažení nelze kontrolovat tlačítko myši pomocí metody getbutton(), neboť toto tlačítko nevyvolalo událost tažení. Kontrola je řešena pomocí metody getmodifiersex(), v jejíž návratové hodnotě jsou zkombinovány bitové příznaky všech akutálně stisknutých tlačítek myši. Pokud návratová hodnota metody getmodifiersex() obsahuje bitový příznak MouseEvent.BUTTON2_DOWN_MASK, potom je tlačítko stisknuto. KST/IPOGR 1-6 Petr Veselý

private void formmousedragged(mouseevent e) { if ((e.getmodifiersex() & (MouseEvent.BUTTON2_DOWN_MASK)) == MouseEvent.BUTTON2_DOWN_MASK) { g.drawline(zacatek.x, zacatek.y, e.getx(), e.gety()) zacatek = e.getpoint() g.dispose() Kód 6: Ukázka kontroly tlačítek myši během události tažení Otázky na procvičení 1. Jak se registruje událost u příslušné komponenty? 2. Jaký je rozdíl při registrování pomocí adaptéru a pomocí listeneru? 3. Co je to rozhraní? 4. Jaké jsou události myši? 5. Jaké jsou události klávesnice? 6. Co je to událost, listener a obslužná metoda? 7. Jaké údaje obsahuje parametr u obslužných metod pro události myši? 8. Jak se rozlišuje tlačítko myši, které událost vyvolalo? 9. Jak se kontrolují současně další stisknutá tlačítka? 10. Jak fungují operátory bitového součtu a součinu? Odkazy a další studijní prameny http://owebu.bloger.cz/programovani/java-grafika-59-dil http://java.sun.com/docs/books/tutorial/2d/index.html http://www.linuxsoft.cz/article.php?id_article=244 Herout, P. Java a grafické uživatelské prostředí. České Budějovice : Koop, 2007. KST/IPOGR 1-7 Petr Veselý