5. Co je to ”grafický kontext”?
Krysa je v grafickém kontextu
dělící čáry.
6. Grafický kontext
Co to znamená ”grafický kontext”?
Je to datová struktura
”Abstraktní kreslítko” - jak a kam VS. co
Je to objekt třídy Graphics (resp. Graphics2D)
Definuje metody pro kreslení a výstup textu
Pro kreslení do komponent většinou překrýváme
metodu:
public void paintComponent(Graphics g)
12. Volba barvy
Před kreslením je barvu třeba nastavit
g.setColor(Color color); // getColor();
Použijeme objekt java.awt.Color
Buď předdefinovanou konstantu (např. Color.RED)
Nebo vlastní instanci
new Color(int red, int green, int blue);
red, green, blue - <0; 255>
16. Volba písma
Před použitím je potřeba písmo nastavit
g.setFont(Font font); // g.getFont();
Písmo je reprezentováno objektem třídy
java.awt.Font
Konstruktor má 3 parametry – name, style, size
name – logické (Serif, Monospaced,
SansSerif, Dialog a DialogInput),
nebo ”fyzické”
style – Font.PLAIN | BOLD | ITALIC
size – velikost v bodech – 1 bod = 1/72”
Objekt písma nelze později upravovat
22. Fontové metriky
Fontové metriky získáme z objektu třídy
java.awt.FontMetrics
public int getAscent() - výška znaku nad
účařím v pixelech
public int getDescent() - výška znaku pod
účařím v pixelech
public int getLeading() - velikost mezery mezi
řádky v pixelech
public int getHeight() - velikost písma v
pixelech
23. Fontové metriky
A objekt FontMetrics získáme z grafického
kontextu
g.getFontMetrics() - metrika aktuálního fontu
g.getFontMetrics(Font font) – metrika
zadaného fontu
28. Kreslení primitivních objektů
g.drawLine(int x1, int y1, int x2, int y2) –
vykreslí čáru mezi body
g.drawRect(int x, int y, int width, int
height) – vykreslí obrys obdélníka (od souřadnic levého
horního rohu)
g.fillRect(int x, int y, int width, int
height) – vyplní obdélník (-||-)
g.drawRoundRect(int x, int y, int width,
int height, int arcWidth, int arcHeight) -
vykreslí obrys obdélníka se zaoblenými rohy (-||-)
g.fillRoundRect(int x, int y, int width,
int height, int arcWidth, int arcHeight) –
vyplní obdélník se zaoblenými rohy (-||-)
29. Kreslení primitivních objektů
g.draw3DRect(int x, int y, int width, int
height, boolean b) – vykreslí obrys 3D obdélníka, b
== true => vystouplý, b == false => zapuštěný ( -||- )
g.fill3DRect(int x, int y, int width, int
height, boolean b) – vyplní 3D obdélník (parametry
stejné jako u draw)
g.drawOval(int x, int y, int width, int
height) – vykreslí obrys elipsy, parametry popisují
obalový obdélník (elipsa se všech stran dotýká)
g.fillOval(int x, int y, int width, int
height) – vyplní elipsu (parametry stejné jako u draw)
30. Kreslení primitivních objektů
Oblouk je určen počátečním úhlem a velikostí vnitřního
úhlu ve stupních
počáteční úhel je na ”3 hodinách”
Proti směru hodinových ručiček je úhel kladný
g.drawArc(int x, int y, int width, int
height, int startAngle, int arcAngle) –
vykreslí obrys oblouku relativně k zadané elipse
g.fillArc(int x, int y, int width, int
height, int startAngle, int arcAngle) – vyplní
oblouk relativně k zadané elipse
g.drawString(String s, int x, int y) – vykreslí
řetězec (souřadnice účaří nejlevějšího znaku)
35. Kreslení obrázků
Rozhraní Icon
Obrázek pevné velikosti používaný pro dekorace
Nelze provádět úpravy obrázku
Lze vykreslit na komponentu metodou g.paintIcon()
Abstraktní třída Image reprezentuje obrázek
VolatileImage – data nejsou přímo dostupná z Javy
BufferedImage – obsahuje pole pixelů dostupných z
Javy, lze do něj kreslit
36. Kreslení obrázků
ImageIcon
Ikona na základě obrázku
Lze použít Image tam, kde je vyžadováno Icon
Konstruktor bere název souboru – URL (gif, png, jpg)
37. Kreslení obrázků
Načtení obrázku
Image je abstraktní, takže musíme jinak
Pomocí třídy Toolkit
Toolkit.getDefaultToolkit().createImage(file);
Kreslení obrázků
g.drawImage() - image, levý horní roh a velikost
Kreslení obrázku je asynchronní
Pokud nejsou k dispozici kompletní data,
informuje komponentu přes rozhranní
ImageObserver, jakmile se další data objeví
Metoda umí vykreslit i výřez
41. Graphics vs. Graphics2D?
Třída Graphics2D
Kvůli zpětné kompatibilitě potomkem třídy
Graphics
Kvůli zpětné kompatibilitě se také stále předává
grafický kontext Graphics a na Graphics2D je
třeba přetypovat
Přidává nové vlastnosti
42. Rozhraní - Shape
Reprezentuje nějaký tvar
Rectangle2D, Ellipse2D, Arc2D
Line2D, CubicCurve2D, QuadCurve2D
GeneralPath
Vykreslení se děje pomocí metod
g2d.draw(Shape s) a g2d.fill(Shape s)
třídy Graphics2D
43. Rozhraní - Paint
Určuje jakou barvou se bude jaký pixel kreslit
Nastavuje se pomocí metody
g2d.setPaint(Paint p); // g2d.getPaint()
Color
GradientPaint, LinearGradientPaint,
RadialGradientPaint
SystemColor – barva pro určitou část GUI
TexturePaint
44. Rozhraní - Stroke
Určuje jakým způsobem se budou kreslit čáry a obrysy
Nastavuje se pomocí metody
g2d.setStroke(Stroke s);// g2d.getStroke()
BasicStroke – definuje tloušťku čáry, styl zakončení a
zalomení čar a přerušení čar
45. Rozhraní - Composite
Určuje způsob zkombinování původní a nové barvy
pixelu při kreslení
Nastavuje se pomocí metody
g2d.setComposite(Composite s);
// g2d.getComposite()
AlphaComposite – původní barva se zkombinuje s
kreslenou a umožňuje průhlednost
50. Transformace
Je možné provést afinní transformaci systému
souřadnic (transformace je reprezentována
maticí)
Třída AffineTransform obaluje matici
Transformaci provedeme postupně pomocí metod
translate (posun počátku), rotate (rotace) a
scale (změna měřítka) objektu třídy
AffineTransform
Nastavuje se pomocí metody
g2d.setTransform(AffineTransform t);
// g2d.getTransform()
54. Polygony a obecné křivky
Mnohoúhelníky
Uzavřené tvary složené z úseku rovných čar
Lze je vykreslit pomocí metod
g.drawPolygon(int[] xPoints, int[] yPoints,
int point)
a
g.fillPolygon(int[] xPoints, int[] yPoints,
int point)
třídy Graphics
Polygon může být reprezentován třídou Polygon,
která obsahuje metodu addPoint() pro přidání
bodu
55. Polygony a obecné křivky
Lomené čáry
Posloupnosti bodů spojené rovnými čarami
Uzavřené lomené čáry jsou polygony
Lze je vykreslit pomocí metody
g.drawPolyline(int[] xPoints, int[] yPoints,
int point)
56. A to je pro dnešek vše. Otázky?
Děkuji za pozornost!