animace.label
Class MoveablePicture

java.lang.Object
  extended by animace.label.MoveablePicture
All Implemented Interfaces:
Moveable, PaintControled

public class MoveablePicture
extends java.lang.Object
implements Moveable, PaintControled

Třída MoveablePicture poskytuje ukázku, jak by měli vypadat grafické komponenty pro třídu animace.label.PictureLabel. Tedy komponenty pro systém, kde se programátor stará o vykreslování sám. Podstatný je princip vykreslování. Objekt pri nějaké změně (pohyb) nastaví proměnou needUpdate na true a volá repaint(). Metoda repaint() je volána s parametry označující tzv. dirty region. Takto by měla být tato metoda volána pokaždé, jinak dochází často zbytečně k překreslováni celé obrazovky (panelu). I když není potřeba objekt překreslit, protože na něm nedošlo ke změně (needUpdate nastaveno na false), musíme ještě otestovat, zda jej jiný objekt "nepřejel", to se zjistí z Clip oblasti nastavené v Graphics g. Viz níže metoda paint(Graphics g). Dále stojí za povšimnuti, že je implementováno přidávání posluchačů udalostí stejně, jako jsme zvyklí u klasických komponent, tedy metodou add"Něco"Listener, v tomto případě addActionListener. To je proto, že lze očekávat, že se na objekty bude klikat. V komponentě, na které tyto objekty visí, je nutné ještě zajistit, že bude volat metodu processEvent(...) nad tou komponentou, na kterou uživatel kliknul. Je toho dost co musíme napsat, abychom zajistili základní funkčnost.


Field Summary
 boolean needUpdate
          Indikuje, že na objetku nastaly změny, a že je nutné jej znovu překreslit.
 
Constructor Summary
MoveablePicture(java.awt.Component owner, java.awt.image.BufferedImage img)
          Konstruktor vyžaduje jako parametr grafického vlastnika (rodiče) objektu, tedy nejakou Componentu na ktere spočívá.
 
Method Summary
 void addActionListener(java.awt.event.ActionListener newActionListener)
          Metoda addActionListener, jak jsme zvyklí z java.AWT.Component Zde implementována pomocí třídy AWTEventMulticaster.
 boolean contains(java.awt.Point point)
          Vrací true, jestliže objekt obsahuje určitý bod, hodi se pri testu na kliknuti
 int getHeight()
          Vrací víšku obrázku
 java.awt.image.BufferedImage getImage()
          Vrací obrázek
 java.awt.Point getLocation()
          Metoda z rozhrani Moveable, Funguje standardně, vrací pozici objektu
 PaintControl getPaintControl()
          Metoda z rozhraní PaintControled
 java.awt.Dimension getPrefferedSize()
          Vrací preferovanou velikost - rozměry obrázku.
 int getWidth()
          Vrací šířku obrázku
 void paint(java.awt.Graphics g)
          Nakreslí tento objekt do grafického kontextu předaného parametrem.
 void processEvent(java.awt.AWTEvent e)
          Metoda processEvent, kterou bude volat zejména předek objektu, v našem případě PictureLabel, provede zavolání metody actionPerformed(...) nad všemi zaregistrovanými posluchači.
 void setLocation(int x, int y)
          Metoda z rozhraní Moveable.
 void setPaintControl(PaintControl pc)
          Metoda z rozhraní PaintControled
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

needUpdate

public boolean needUpdate
Indikuje, že na objetku nastaly změny, a že je nutné jej znovu překreslit.

Constructor Detail

MoveablePicture

public MoveablePicture(java.awt.Component owner,
                       java.awt.image.BufferedImage img)
Konstruktor vyžaduje jako parametr grafického vlastnika (rodiče) objektu, tedy nejakou Componentu na ktere spočívá.

Parameters:
owner - Componenta, na které je MoveablePicture nakreslen
img - vlastní obrázek, který se bude pohybovat
Method Detail

paint

public void paint(java.awt.Graphics g)
Nakreslí tento objekt do grafického kontextu předaného parametrem. Algortimus je následující. Pokud se s objektem hýbalo a je třeba jej překreslit, needUpdate == true, pak nic nezmůžeme a musíme jej kreslit. Ale pokud needUpdate == false a tento objekt není v "dirty regionu" (g.getClipBounds()) kreslit jej nemusíme a ušetříme čas.


getImage

public java.awt.image.BufferedImage getImage()
Vrací obrázek


getPrefferedSize

public java.awt.Dimension getPrefferedSize()
Vrací preferovanou velikost - rozměry obrázku.


getWidth

public int getWidth()
Vrací šířku obrázku


getHeight

public int getHeight()
Vrací víšku obrázku


setLocation

public void setLocation(int x,
                        int y)
Metoda z rozhraní Moveable. Nastaví novou pozici objektu a hodnotu needUpdate na true. Poté zavolá owner.repaint(int x, int y, int width, int height), která zaregistruje požadavek na překreslení pouze té části obrazovky, kde došlo ke změnám na grafice. Při zavolani této metody, nedochází k žádným kontrolám, zda jsou údaje správné

Specified by:
setLocation in interface Moveable

getLocation

public java.awt.Point getLocation()
Metoda z rozhrani Moveable, Funguje standardně, vrací pozici objektu

Specified by:
getLocation in interface Moveable

setPaintControl

public void setPaintControl(PaintControl pc)
Metoda z rozhraní PaintControled

Specified by:
setPaintControl in interface PaintControled
Parameters:
pc - PaintControler který bude hlídat kreslení objektu.

getPaintControl

public PaintControl getPaintControl()
Metoda z rozhraní PaintControled

Specified by:
getPaintControl in interface PaintControled

addActionListener

public void addActionListener(java.awt.event.ActionListener newActionListener)
Metoda addActionListener, jak jsme zvyklí z java.AWT.Component Zde implementována pomocí třídy AWTEventMulticaster.


processEvent

public void processEvent(java.awt.AWTEvent e)
Metoda processEvent, kterou bude volat zejména předek objektu, v našem případě PictureLabel, provede zavolání metody actionPerformed(...) nad všemi zaregistrovanými posluchači.


contains

public boolean contains(java.awt.Point point)
Vrací true, jestliže objekt obsahuje určitý bod, hodi se pri testu na kliknuti

Parameters:
point - bod, který je testován, zda leží na obrazku