Search
Tento návod je určen pro zvídavé, tato tématika není součástí kurzu Programování, není vyžadována a nebude zkoušena.
Grafické uživatelské rozhraní umožňuje uživateli komunikovat s programem pomocí grafického rozhraní. Na vytváření grafických rozhraní dostává programátor v Javě dvě knihovny:
Swing je součástí Java Foundation Classes (JFC). Swing se doporučuje používat, protože je moderní a obsahuje dokonalejší prvky. Třídy knihovny Swing začínají písmenem J, například JButton je komponenta, která nahradila Button (tlačítko, knoflík)z AWT. Mezi jeho přidanou funkčnost patří například možnost vložení obrázku. Výrazně se nedoporučuje kombinovat prvky z obou knihoven (mohou vznikat problémy při překreslování). Pro inspiraci, jak mohou vypadat aplikace ve Swingu se navštivte - příklady aplikací ve Swingu.
Pro první kroky v grafice použijte tuto jednoduchou hračku. Pro její použití nepotřebujete znát pojmy programovací schéma MVC (model - view - controller), správce rozvržení (Layout manager), posluchač událostí a jeho registrace a mnohé další.
Vykreslování jednotlivých komponent zajišťuje Java, my budeme psát náš kód do metody paintComponent(Graphics g) třídy KresliciPlocha. Pojmenovávání metod využívá jazyka českého, aby byly zjednodušeny první kroky i programátorům s nižší znalostí angličtiny(zároveň je tak odlišen kód využívajíci standardní knihovny). Seznam metod pracujících s grafikou najdete například na stránkách popisujících třídu Graphics. Mezi základní metody patří drawOval(), (vykreslí ovál, tedy téměř elipsu) a drawRect(),(vykreslí obdélník). Další metody začínající draw vykreslují jiná grafická primitiva, metody začínající fill vykreslují vyplněné objekty.
Jednoduchou hračku pro kreslení lze upravit na prográmek, který demonstruje použití rekurze při kreslení fraktálů. Tento prográmek si můžete stáhnout jako fraktal.zip. Popis hlavní třídy je uveden v souboru fraktal. Tady najdete návod pro obsluhu základních událostí. Strategie programování - MVC Existuje doporučení pro psaní programů v Javě, které nám umožní napsat přehledný, dobře modifikovatelný program s uživatelských rozhraním. Tento přístup využívá tří částí programu nazývaných
Více o funkci jednotlivých částí a popis jednoduché aplikace využívající tento přístup naleznete v souboru MVC.
V Javě je zdánlivý problém zjištění, které klávesy jsou stisknuty, pokud jich je stisknuto více současně (tento problém nenastává v případě stisku klávesy modifikující význam hlavní klávesy, např. klávesy Shift či Ctrl). Pokud budeme tedy chtít napsat hru pro více hráčů musíme vytvořit seznam stisknutých kláves, do kterého budeme klávesu přidávat, pokud někdo klávesu stiskne (událost keyPressed)a ze seznamu vyndávat při události klávesa puštěna (keyReleased). Pak je samozřejmě nutné měnit model v pravidelných časových intervalech, nikoli pouze při změně stisknuté klávesy.
Tento přístup je dokumentován na jednoduché honičce. Jde o projekt v JBuilderu, s malými úpravami je použitelný i v NetBeans.
Barva pera, které kreslí se mění pomocí příkazu setColor(Color c), tato metoda má parametr typu Color. Nastavení barvy na červenou lze provést těmito dvěma způsoby
paintComponent(Graphics g){ .... g.setColor(Color.RED); // druhý způsob: g.setColor(new Color(255,0,0)); }
Druhý způsob Vám umožní vytvořit vlastní barvu namícháním třech složek RGB, každá složka je reprezentovaná číslem od nuly do 255. Jednotlivé složky jsou Red - červená, Green - zelená a Blue - modrá. Pokud chcete vykreslovat objekty vyplněné, pak použijte místo metody drawRect(.. metodu fillRect(…. Kreslení na plátno, tak jek je popsáno výše, neumožňuje jednoduše kreslit složité útvary se vzory, specifickým ohraničením, apod.
Jeden pixel (obrazový bod) lze změnit například pomocí drawLine(x,y,x+1,y). Zjišťování barvy pixelu je možné, ale pro výuku programování nevhodné, protože pixel není vhodný model pro reprezentaci dat v programu. Vhodnější je uchovávat všechny informace v modelu - tak jak je to popsáno výše.
Ano i v Javě je obdoba takové třídy. Dokonce existují tyto obdoby dvě, java.util.Timer a třída Timer definovaná v knihovně Swing. Použití časovače - timeru je uvedeno v příkladu hračka MVC.
Dodefinování obsluhy událostí myši je popsáno ve stejnojmenné kapitole v souboru fraktal.
Vykreslení obrázku uloženého v proměnné typu Image zajistíte v metodě paintComponent voláním
g.drawImage(obr,120,120,null);
, kde 120,120 specifikuje pozici. Toto je základní formát, použitím
g.drawImage(obr,100,10,obr.getWidth(null)/2, obr.getHeight(null)/2,null);
vykreslíte obrázek v jeho poloviční šířce a výšce. Dojde k jeho zmenšení, nikoli oříznutí. Před použitím proměnné obr ji musíte nejprve inicializovat, nejlépe v konstruktoru modelu. Následující metoda to zajistí pro soubor specifikovaný jménem včetně cesty.
public Image nactiObrazek(String fileName){ Image image; image = new ImageIcon(fileName).getImage(); if(image.getWidth(null)<1)System.out.println("Nepodarilo se nacist soubor "+ fileName); return image; }
String userDir = System.getProperty("user.dir"); String fileSeparator = System.getProperty("file.separator"); obr = nactiObrazek(userDir +fileSeparator+"obr"+fileSeparator+"sonic.gif");