Grafika
V této 48sti se seznámíme se základy grafiky v Javě naučíme se kreslit na obrazovku, používat barvy či načíst rastr. Budeme pracovat s třídou Graphics, která umožňuje základní grafické operace. Pro pokročilejší kresbu lze použít třídu Graphics2D. Uveďme pro úplnost, že v Javě můžeme kreslit jak 2D, tak i 3D. Existuje velké množství tříd obsahujících nástroje provádějící řadu pokročilých grafckých operací jako rendering, animaci, práce s multimédii. Java dokáže využívat knihovny OpenGL. Nebudeme využívat rozhraní AWT, ale Swing.Rychlost grafiky v Javě. Často používaným argumentem je, že grafika v Javě je pomalá. Tento nedostatek se projevoval zejména u prvních verzí jazyka Java. Rychlost kódu byla až 30 nižší než u kompilovaného C++, v současné době je Java cca 2x pomalejší než C++ (přibližný údaj). Grafku v Javě můžeme považovat za poměrně rychlou.
Kdy dojde k vykreslení obrazu? Při kreslení v Javě za použití třídy Graphics nemůžeme přesně určit okamžik, kdy dojde k vykreslení obrazu. Kresba je provedena v okamžiku, kdy to grafické rozhraní považovat za nezbytné. Překreslení obrazu však můžeme vyvolat uměle prostřednictvím metody repaint().
Tento způsob je poněkud nezvyklý, vede však uživatele k tomu, že není možné na plochu okna kreslit bez systému v okamžiku, kdy se mu zrovna zachce. Je způsoben tím, že vykreslování nesmí být přerušeno žádnou jinou činností, proto JVM vyčkává na vhodný okamžik. Vykreslování probíhá hierarchicky od komponent s vyšší hierarchií sestupně ke komponentám s nižší hierarchií.
Double buering. Java podporuje pro zvýšení kvality vykreslování techniku double bueringu. Vykreslování v takovém případě neprobíhá po částech na komponentě, ale ve specializovaném bueru v paměti. Po vykreslení do bueru je obrázek přenesen na komponentu. Výsledkem je kvalitnější obraz než při
klasickém přístupu.
Kreslící plocha má v Javě tvar obdélníka. Pro zvýšení rychlosti vykreslování se v Javě často používá trik, kdy komponenty označíme za průhledné. Grafické rozhraní pak nemusí ztrácet čas s jejich vykreslováním. Vykreslování probíhá na plátno komponenty, které se nazývá Canvas.
Metody pro kreslení ve Swingu. Jak jsme uvedli v úvodu, při překreslování je používán hierarchický model realizovaný trojicí metod.
Metoda repaint je přetížená, uveďme některé prototypy:
repaint();
repaint(int time);
repaint(int time, int x, int y, int width, int heigh);
První metoda provede překreslení v okamžiku, kdy to systém uzná za vhodné, druhá v zadaném čase v milisekundách, třetí překreslí pouze oblast zadanou výřezem v zadaném čase v milisekundách.
Autor: Filip Koval