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



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

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

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

Java - výjimky. private void vstup() throws IOException {... }

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.

8. GRAFICKÉ UŽIVATELSKÉ ROZHRANÍ

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

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

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

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

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

Abstraktní třída a rozhraní

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Práce se soubory v Javě

Grafické uživatelské rozhraní v Javě. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

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

GUI - úvod. V této kapitole si ukážeme návod, jak vytvořit jednoduchou grafickou aplikaci a umístit do ní některé další grafické prvky.

20. Projekt Domácí mediotéka

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

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

Principy objektově orientovaného programování

Generické programování

Programování v Javě I. Leden 2008

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Projekt Obrázek strana 135

aktivita, kdy sami chceme vykreslit nějaký grafický obrazec (úsečku, kružnici, atd.) nebo vypsat text

KTE / ZPE Informační technologie

Java testovací třída

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

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

Kreslíme do webu. Canvas

UNIVERZITA PARDUBICE

GUI v Javě. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 5 B0B36PJV Programování v JAVA

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

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

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

GUI v Javě. GUI v Javě GUI komponenty a kontejnery Dialogová okna Události a obsluha událostí z GUI

Cvičení 7: Delphi objekty CheckedBox, Radio- Button, EditBox

Typický prvek kolekce pro české řazení

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

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

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

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

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

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

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

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

Programování v C++ 1, 6. cvičení

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

VIII. Seminář Java VIII p.1/36

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Java - řazení objektů

Jazyk C# (seminář 3)

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

Část I Příklad - Generické typy, iterátor

GUI v Javě. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 3 A0B36PR2 Programování 2

Seminář Java II p.1/43

2 Tvorba interaktivních grafických programů

Jazyk C# (seminář 7)

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

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

JSR tutorial 1 Úvod do JSR-184

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

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

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

GUI v Javě. Jan Faigl. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 3 A0B36PR2 Programování 2

5 Rekurze a zásobník. Rekurzivní volání metody

Výčtový typ strana 67

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

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Abstraktní datové typy: zásobník

Část I Příklad - Generické typy, iterátor

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

Úvod do programování - Java. Cvičení č.4

GUI v Javě. Jiří Vokřínek. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze. Přednáška 5 B0B36PJV Programování v JAVA

Jazyk C# (seminář 6)

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Seznámení s AWT: práce s okny, grafikou a textem

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

OOPR_05. Případové studie

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Vektorová grafika. Návod do cvičení z Informatiky pro ekonomy I

Knihovna CanvasLib TXV první vydání prosinec 2014 změny vyhrazeny

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Teoretické minimum z PJV

15. Projekt Kalkulačka

SMART Notebook verze Aug

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

1. Dědičnost a polymorfismus

Třídy a dědičnost. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Vývoj desktopových aplikací v Jazyce Java s bohatým grafickým uživatelským rozhraním.

Programovací jazyk Java

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

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

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

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

1. Téma 12 - Textové soubory a výjimky

Transkript:

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, int y2)... vykreslí linii, jdoucí z počátečního bodu P1[x1, y1] do koncového bodu P2[x2, y2]. Eliptická výseč.... drawarc(int x, int y, int sirka, int vyska, int start_uhel, int konc_uhel). Souřadnice x, y představují levý horní roh obdélníku zadané šířky a délky, do kterého je výseč vepsána, jsou dány počáteční a koncový úhel ovlivňující délku oblouku. Elipsa... drawoval(int x, int y, int sirka, int vyska) slouží k vykreslení elipsy vepsané do obdélníku zadané šířky a délky, jsou dány souřadnice levého horního rohu obdélníka. Polygon... polygon představuje uzavřenou oblast definovanou lomovými body spojenými úsečkami. Lze ho nakreslit metodou drawpolygon(), která je přetížená. Existují dvě varianty: drawpolygon(int [x], int [y], int pocet_vrcholu) a drawpolygon(polygon p). V první je polygon defnován polem x-ových a y-ových souřadnic, druhý objektem typu polygon. Polyline (lomená čára)... drawpolyline( int [x], int [y], int pocet_vrcholu). Význam parametrů je stejný jako u polygonu. Obdélník... drawrect(int x, int y, int sirka, int vyska). Význam parametrů je stejný jako u elipsy. 3D obdélník... draw3drect(int x, int y, int sirka, int vyska, boolean stav) vytvoří plastický obdélník připomínající tlačítko. Tlačítko může být zamáčklé nebo nezamáčklé, rozhoduje o tom booleovská proměnná stav. Text... drawstring(string text, int x, int y) - text umístěný na specifické souřadnice. Vyplňování entit barvou Útvary jsou standardně vyplňovány stejnou barvou, jakou byly nakresleny. Připomeňme metody setcolor( Color c) a getcolor() pro nastavení a získání barvy. Pokud chceme vyplnit útvar jinou barvou, než je nakreslen jeho obrys, nastavíme barvu pro výplň a vyplníme útvar, změníme barvu vykreslíme obrys útvaru. Parametry metod jsou stejné jako v případě metod pro kresbu nevyplněných entit. Vyplněný 3D obdélník... fill3drect(int x, int y, int sirka, int vyska, boolean stav). Vyplněná eliptická výseč... fillarc(int x, int y, int sirka, int vyska, int start_uhel, int konc_uhel) Vyplněná elipsa... filloval(int x, int y, int sirka, int vyska) Vyplněný polygon... fillpolygon(int [x], int [y], int pocet_vrcholu) nebo fillpolygon(polygon p). Grafický kontext poskytuje uživatelský souřadnicový systém a vše, co potřebujeme ke kreslení čehokoliv na komponentě grafický kontext = instance třídy Graphics (awt) nebo jeho potomka Graphics2D (swing) Graphics i Graphics2D jsou abstraktní třídy grafický kontext je vždy získán pro použití s konkrétní komponentou instance třídy Graphics2D se stará o mapování uživatelských souřadnic na souřadnice strojové, zahrnuje informaci o stroji, který je cílem výstupu odkaz na grafický kontext musíme mít předtím, než v něm začneme kreslit odkaz na grafický kontext můžeme vždy získat také pomocí metody getgraphics() 2/28/11 1/8 Java - kresba

Kreslení naše kreslící třída bude: potomkem třídy JComponent bude obsahovat metodu paint() nebo nověji paintcomponent(), pomocí těchto metod kreslíme grafický kontext je předán metodě paintcomponent() grafickému kontextu Graphics můžeme nastavit vlastnosti: barva... g.setcolor(color barva) typ písma... g.setfont(new Font("SansSerif",Font.ITALIC+Font.BOLD,20)); příklad 1a - Graphics: public class KresbaObrazce extends JComponent { public void paintcomponent(graphics g) { g.setcolor(color.blue); g.fillrect(40,50,300,200); g.setcolor(color.yellow); g.setfont(new Font("SansSerif",Font.ITALIC+Font.BOLD,20)); g.drawstring("ahoj",160,160); grafickému kontextu Graphics2D můžeme nastavit vlastnosti: paint = kresba = barva... g2d.setpaint() stroke = tah = styl čáry font = písmo transform = transformace clip = oříznutí composite = kompozice = jak budou kresleny překrývající se tvary můžeme použít metody pro kreslení: draw(shape tvar) fill(shape tvar) drawstring(string text) drawimage() metody pro překreslování paint() nebo nověji paintcomponent()... volána vždy, když má být komponenta rekonstruována, způsobí překreslení celé komponenty repaint()... způsobí překreslení celé komponenty voláním metody paint() je přetížená jako parametr můžeme použít časový limit a oblast, která má být překreslena příklad 1b - Graphics2D: public class KresbaObrazce extends JComponent { public void paintcomponent(graphics g) { super.paintcomponent(g); Graphics2D g2d = (Graphics2D)g; // musíme přetypovat g2d.setpaint(color.red); g2d.draw(new Rectangle(100,100,200,200)); g2d.setpaint(color.green); int[] x = {10, 240, 150; int[] y = {30, 100, 310; g2d.draw(new Polygon(x,y,3)); 2/28/11 2/8 Java - kresba

Instanci třídy Kresba obrazce pak použijeme v hlavním okně GUI: public class Platno extends JFrame { private Container obsah; private JPanel po; private KresbaObrazce ko; public Platno() { inicializace(); obsah(); zviditelneni(); public void inicializace() { this.setsize(400,400); this.settitle("kreslící plátno"); obsah = this.getcontentpane(); obsah.setlayout(new BorderLayout()); public void obsah() { po = new JPanel(); po.setbackground(color.white); po.setlayout(new BorderLayout()); obsah.add(po, BorderLayout.CENTER); ko = new KresbaObrazce(); po.add(ko); public void zviditelneni () { this.setdefaultcloseoperation(dispose_on_close); this.setvisible(true); 2/28/11 3/8 Java - kresba

Příklad 2: Přidáme si panel s možností volby obrazce a budeme reagovat na stisk odpovídajícího tlačítka: public class Platno extends JFrame { private int sirka, vyska; private Container obsah; private JButton[] co = new JButton[3]; private JPanel pb, po; private KresbaObrazce ko; public Platno(int sirka, int vyska) { this.sirka = sirka; this.vyska = vyska; inicializace(); obsah(); zviditelneni(); public void inicializace() { this.setsize(sirka,vyska); this.settitle("plátno"); obsah = this.getcontentpane(); obsah.setlayout(new BorderLayout()); public void obsah() { pb = new JPanel(); this.getcontentpane().add(pb, BorderLayout.NORTH); co[0] = new JButton("nakresli kruh"); co[1] = new JButton("nakresli obdélník"); co[2] = new JButton("napis text"); for (int i=0; i<3; i++) { pb.add(co[i]); co[i].addactionlistener(new Kresba(i)); po = new JPanel(); po.setbackground(color.white); po.setlayout(new BorderLayout()); this.getcontentpane().add(po, BorderLayout.CENTER); ko = new KresbaObrazce(-1); po.add(ko); /* handler = zobrazí odpovídající obrazec */ class Kresba implements ActionListener { int druh; public Kresba(int druh) { this.druh = druh; public void actionperformed(actionevent e) { kresli(e, druh); public void kresli(actionevent e, int druh) { ko.setobrazec(druh); po.repaint(); public void zviditelneni () { this.setdefaultcloseoperation(dispose_on_close); this.setvisible(true); 2/28/11 4/8 Java - kresba

public class KresbaObrazce extends JComponent { private int druh; public KresbaObrazce(int druh) { this.druh=druh; public void setobrazec(int druh) { this.druh=druh; public void paintcomponent(graphics g) { switch (druh) { case -1: System.out.println("začátek"); break; case 0: g.setcolor(color.red); g.drawoval(40,40,100,100); break; case 1: g.setcolor(color.blue); g.drawrect(100,200,120,60); break; case 2: g.setcolor(color.green); g.setfont(new Font("SansSerif",Font.ITALIC+Font.BOLD,20)); g.drawstring("ahoj",160,160); break; 2/28/11 5/8 Java - kresba

Příklad 3: Vybudujeme vlastní garfické komponenty: public class Bod { private int x,y; public Bod(int x, int y) { this.x=x; this.y=y; int getx() { return x; int gety() { return y; ---------------------------------------------------------------------------------- public class Kruh { private int polomer; private Bod stred; public Kruh(Bod stred, int polomer) { this.stred = stred; this.polomer=polomer; public Bod getstred() { return this.stred; public int getpolomer() { return this.polomer; ---------------------------------------------------------------------------------- import java.util.*; public class GenerujKruh { int sirka, vyska; int x, y, polomer; private Kruh k; Random rnd; public GenerujKruh(int sirka, int vyska) { this.sirka = sirka; this.vyska = vyska; rnd = new Random(); polomer = rnd.nextint(sirka/6)+3; x = rnd.nextint(sirka-2*polomer) + polomer; y = rnd.nextint(vyska-2*polomer) + polomer; k = new Kruh(new Bod(x, y), polomer); Kruh getkruh() { return k; ---------------------------------------------------------------------------------- import java.awt.*; import javax.swing.jcomponent; 2/28/11 6/8 Java - kresba

public class KresbaKruhu extends JComponent { private GenerujKruh kr; private int sirka, vyska; private Kruh k; boolean kreslit; public KresbaKruhu() { kreslit = false; public void setkruh() { sirka = this.getwidth(); vyska = this.getheight(); kr = new GenerujKruh(sirka, vyska); k = kr.getkruh(); kreslit = true; repaint(); public void paintcomponent(graphics g) { if (kreslit) { g.setcolor(color.red); int x = k.getstred().getx() - k.getpolomer(); int y = k.getstred().gety() - k.getpolomer(); g.drawoval(x, y, 2*k.getPolomer(), 2*k.getPolomer()); ----------------------------------------------------------------------------------- public class Platno extends JFrame { private int sirka, vyska; private JButton tlac; private JPanel pb, po; private KresbaKruhu kk; public Platno(int sirka, int vyska) { this.sirka = sirka; this.vyska = vyska; inicializace(); obsah(); public void inicializace() { this.setsize(sirka,vyska); this.settitle("kružnice"); this.setdefaultcloseoperation(dispose_on_close); this.setlayout(new BorderLayout()); public void obsah() { pb = new JPanel(); this.getcontentpane().add(pb, BorderLayout.NORTH); tlac = new JButton("generuj kruh"); pb.add(tlac); tlac.addactionlistener(new Kresba()); po = new JPanel(); po.setbackground(color.white); po.setlayout(new BorderLayout()); this.getcontentpane().add(po, BorderLayout.CENTER); kk = new KresbaKruhu(); po.add(kk); 2/28/11 7/8 Java - kresba

/* handler = zobrazí odpovídající obrazec */ class Kresba implements ActionListener { public void actionperformed(actionevent e) { kresli(e); public void kresli(actionevent e) { kk.setkruh(); public static void main (String[] args) { Platno p = new Platno(500,700); p.setvisible(true); 2/28/11 8/8 Java - kresba