java.lang.ObjectSpravcePlatna
public final class SpravcePlatna
Třída SprávcePlátna
slouží k jednoduchému kreslení
na virtuální plátno a připadné následné animaci nakreslených obrázků.
Třída neposkytuje veřejný konstruktor, protože chce, aby její instance
byla jedináček, tj. aby se všechno kreslilo na jedno a to samé plátno.
Jediným způsobem, jak získat odkaz na instanci třídy
SprávcePlátna
,
je volaní její statické metody getInstance()
.
Třída SprávcePlátna
funguje jako manažer, který dohlíží
na to, aby se po změně zobrazení některého z tvarů všechny ostatní tvary
řádně překreslily, aby byly správně zachyceny všechny překryvy
a aby se při pohybu jednotlivé obrazce vzájemně neodmazavaly.
Aby vše správně fungovalo, je možno použít jeden ze dvou přístupů:
Třída SprávcePlátna
požívá druhou z uvedených strategií,
tj. překresluje plátno pouze na požádání.
Obrazec, který chce být zobrazován na plátně, se musí nejprve přihlásit
u instance třídy SprávcePlátna
, aby jej tato zařadila
mezi spravované obrazce (sada metod přidej…
).
Přihlásit se však mohou pouze instance tříd, které implementují
rozhraní IKreslený
.
Nepřihlášený obrazec nemá šanci býti zobrazen, protože na plátno
se může zobrazit pouze za pomoci kreslítka, jež může získat jedině od
instance třídy SprávcePlátna
, ale ta je poskytuje pouze
instancím, které se přihlásily do její správy.
Obrazec, který již dále nemá byt kreslen, se muže odhlásit zavoláním
metody odstraň(IKreslený)
.Zavoláním metody
odstraňVše()
se ze seznamu spravovaných (a tím i z plátna)
odstraní všechny vykreslované obrazce.
Efektivitu vykreslování je možné ovlivnit voláním metody
nekresli()
, která pozastaví překreslování plátna po nahlášených
změnách. Její volání je výhodné např. v situaci, kdy je třeba vykreslit
obrazec složený z řady menších obrazců a bylo by nevhodné překreslovat
plátno po vykreslení každého z nich.
Do původního stavu převedeme plátno voláním metody vraťKresli()
,
která vrátí vykreslování do stavu před posledním voláním metody
nekresli()
. Nemůžeč se tedy stát, že by se při zavolání metody
nekresli()
v situaci, kdy je již vykreslování pozastaveno,
začalo po následém zavolání vraťKresli()
hned vykreslovat.
Po dvou voláních vraťKresli()
se začne vykreslovat až po
dvou zavoláních vraťKresli()
.
Proto plátno pouze žádáme, aby se vrátilo do toho kreslícího stavu,
ve kterém bylo v okamžiku, kdy jsme je naposledy žádali o to,
aby se přestalo překreslovat. Nemůže se tedy stát, že by se při zavolání
metody nekresli()
v situaci, kdy je již vykreslování
pozastaveno, začalo po následném zavolání vraťKresli()
hned
vykreslovat.
Každé zavolání metody nekresli()
musí být doplněno
odpovídajícím voláním vraťKresli()
. Teprve když poslední
vraťKresli()
odvolá první nekresli()
, bude
překreslování opět obnoveno.
Field Summary | |
---|---|
(package private) java.awt.Point |
pozicePlatna
Pozice plátna na obrazovace - při používání více obrazovek je občas třeba ji po zviditelnění obnovit. |
Method Summary | |
---|---|
Barva |
getBarvaPozadi()
Vrátí aktuální barvu pozadí. |
int |
getBsirka()
Vrátí bodovou šířku plátna. |
int |
getBVyska()
Vrátí bodovou výšku plátna. |
static SpravcePlatna |
getInstance()
Metoda umožnující získat odkaz na instanci správce plátna a případně zviditelnit jeho aplikační okno. |
static SpravcePlatna |
getInstance(boolean viditelny)
Metoda umožnující získat odkaz na instanci správce plátna a současně nastavit, zda má být jeho aplikační okno viditelné. |
int |
getKrok()
Vrátí vzdálenost čar mřížky = bodovou velikost políčka. |
java.lang.String |
getNazev()
Vrátí aktuální název v titulkové liště okna plátna. |
int |
getNekresli()
Pomocná metoda pro účely ladění aby bylo možno zkontrolovat, ze na konci metody má semafor stejnou hodnotu, jako měl na počátku. |
Obrazek |
getObrazek(int x,
int y,
int sirka,
int vyska)
Vrátí instanci třídy Obrázek zobrazující zadaný výřez
AktivníhoPlátna. |
Pozice |
getPozice()
Vrátí vodorovnou souřadnici aplikačního okna plátna. |
int |
getRadku()
Vrátí počet řádků plátna, tj. jeho políčkovou výšku. |
Rozmer |
getRozmer()
Vrátí políčkový rozměr plátna, tj. šířku a výšku v polích. |
int |
getSloupcu()
Vrátí počet sloupců plátna, tj. jeho políčkovou šířku. |
boolean |
isMrizka()
Vrátí informaci o tom, je-li zobrazována mřížka. |
boolean |
isViditelne()
Poskytuje informaci o aktuální viditelnosti okna. |
static void |
main(java.lang.String[] args)
|
void |
nekresli()
Potlačí překreslování plátna, přesněji zvýší hladinu potlačení překreslování o jedničku. |
void |
odhlasKlavesnici(java.awt.event.KeyListener posluchac)
Odhlásí posluchače klávesnice. |
void |
odhlasMys(java.awt.event.MouseListener posluchac)
Odhlásí posluchače myši. |
boolean |
odstran(IKresleny obrazec)
Odstraní zadaný obrazec ze seznamu malovaných. |
void |
odstranVse()
Vyčisti plátno, tj. vyprázdní seznam malovaných (odstraní z něj všechny obrazce). |
int |
poradi(IKresleny obrazec)
Vrátí pořadí zadaného prvku v seznamu kreslených prvků. |
void |
prekresli()
Vykreslí všechny elementy. |
int |
pridej(IKresleny... obrazec)
Není-li zadaný obrazec v seznamu malovaných, přidá jej na konec (bude se kreslit jako poslední, tj. na vrchu. |
boolean |
pridejDospod(IKresleny pridany)
Přidá obrazec do seznamu malovaných tak, aby byl kreslen pod zadaným obrazcem. |
boolean |
pridejNad(IKresleny soucasny,
IKresleny pridany)
Přidá obrazec do seznamu malovaných tak, aby byl kreslen nad zadaným obrazcem. |
boolean |
pridejNavrch(IKresleny pridany)
Přidá obrazec do seznamu malovaných tak, aby byl kreslen nad všemi obrazci. |
boolean |
pridejPod(IKresleny soucasny,
IKresleny pridany)
Přidá obrazec do seznamu malovaných tak, aby byl kreslen pod zadaným obrazcem. |
void |
prihlasKlavesnici(java.awt.event.KeyListener posluchac)
Přihlásí posluchače událostí klávesnice. |
void |
prihlasMys(java.awt.event.MouseListener posluchac)
Přihlásí posluchače událostí myši. |
void |
setBarvaPozadi(Barva barva)
Nastaví pro plátno barvu pozadí. |
void |
setKrok(int velikost)
Nastaví vzdálenost čar mřížky = bodovou velikost políčka. |
void |
setKrokRozmer(int krok,
int pSirka,
int pVyska)
Nastaví rozměr plátna zadáním bodové velikosti políčka a počtu políček ve vodorovném a svislém směru. |
void |
setKrokRozmer(int krok,
int pSirka,
int pVyska,
java.lang.Object menic)
Nastaví rozměr plátna zadáním bodové velikosti políčka a počtu políček ve vodorovném a svislém směru. |
void |
setMrizka(boolean zobrazit)
V závislosti na hodntě parametru nastaví nebo potlačí zobrazování čar mřížky. |
void |
setMrizka(boolean zobrazit,
boolean nad)
Nastaví má-li se na plátně nastavovat mřížka a pokud ano, tak zda se čáry mžížky budou zobrazovat nad nebo pod zobrazovnými tvary. |
void |
setNazev(java.lang.String nazev)
Nastaví název v titulkové liště okna plátna. |
void |
setPozice(int x,
int y)
Nastaví pozici aplikačního okna aktivního plátna na obrazovce. |
void |
setPozice(Pozice pozice)
Nastaví pozici aplikačního okna aktivního plátna na obrazovce. |
void |
setRozmer(int sloupcu,
int radku)
Nastaví rozměr plátna zadáním jeho políčkové výsky a šířky. |
void |
setRozmer(Rozmer rozmer)
Nastaví rozměr plátna zadáním jeho políčkové výsky a šířky. |
void |
setViditelne(boolean viditelne)
V závislosti na hodnotě svého parametru nastaví nebo potlačí viditelnost plátna na displeji. |
java.util.List<IKresleny> |
seznamKreslenych()
Vrátí nemodifikovatelný seznam všech spravovaných obrázků. |
static void |
test()
Testovaci metoda |
java.lang.String |
toString()
Převede instanci na řetězec. |
void |
ulozJakoObrazek(java.io.File soubor)
Uloží obraz aktivního plátna do zadaného souboru. |
void |
vratKresli()
Vrátí překreslování do stavu před posledním voláním metody nekresli() . |
Methods inherited from class |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
java.awt.Point pozicePlatna
Method Detail |
---|
public Barva getBarvaPozadi()
public int getBsirka()
public int getBVyska()
public static SpravcePlatna getInstance()
Pokud instance při volaní metody ještě neexistuje, metoda instanci vytvoří.
SprávcePlátna
public static SpravcePlatna getInstance(boolean viditelny)
Pokud instance při volaní metody ještě neexistuje, metoda instanci vytvoří.
viditelný
- Má-li se zajistit viditelnost instance;
false
aktuálně nastavenou viditelnost nemění
SprávcePlátna
public int getKrok()
public java.lang.String getNazev()
public int getNekresli()
public Obrazek getObrazek(int x, int y, int sirka, int vyska)
Obrázek
zobrazující zadaný výřez
AktivníhoPlátna.
x
- Vodorovná pozice požadovaného výřezuy
- Svislá pozice požadovaného výřezušířka
- Šířka požadovaného výřezu v bodechvýška
- Výška požadovaného výřezu v bodech
Obrázek
zobrazující zadaný výřezpublic Pozice getPozice()
public int getRadku()
public Rozmer getRozmer()
public int getSloupcu()
public boolean isMrizka()
public boolean isViditelne()
public static void main(java.lang.String[] args)
args
- Paremtry příkazového řádku - nepoužitépublic void nekresli()
vraťKresli()
.
Metody nekresli()
a vraťKresli()
se tak chovají obdobně jako závorky, mezi nimiž je vykreslování
potlačeno.
public void odhlasKlavesnici(java.awt.event.KeyListener posluchac)
posluchač
- Odhlašovaný posluchačpublic void odhlasMys(java.awt.event.MouseListener posluchac)
posluchač
- Odhlašovaný posluchačpublic boolean odstran(IKresleny obrazec)
obrazec
- Odstraňovaný obrazec
public void odstranVse()
public int poradi(IKresleny obrazec)
obrazec
- Objekt, na jehož kreslicí pořadí se dotazujeme
public void prekresli()
public int pridej(IKresleny... obrazec)
obrazec
- Přidávané obrazce
public boolean pridejDospod(IKresleny pridany)
přidaný
- Přidávaný obrazec
public boolean pridejNad(IKresleny soucasny, IKresleny pridany)
současný
- Obrazec, který má byt při kreslení pod
přidávaným obrazcempřidaný
- Přidávaný obrazec
true
v případě, když byl obrazec opravdu přidán,
false
v případě, když již mezi zobrazovanými byl
a pouze se přesunul do jiné urovnépublic boolean pridejNavrch(IKresleny pridany)
přidaný
- Přidávaný obrazec
public boolean pridejPod(IKresleny soucasny, IKresleny pridany)
současný
- Obrazec, který má byt při kreslení nad
přidávaným obrazcempřidaný
- Přidávaný obrazec
public void prihlasKlavesnici(java.awt.event.KeyListener posluchac)
posluchač
- Přihlašovaný posluchačpublic void prihlasMys(java.awt.event.MouseListener posluchac)
posluchač
- Přihlašovaný posluchačpublic void setBarvaPozadi(Barva barva)
barva
- Nastavovaná barva pozadípublic void setKrok(int velikost)
velikost
- Nová bodová velikost políčkapublic void setKrokRozmer(int krok, int pSirka, int pVyska)
krok
- Nová bodová velikost políčkapŠířka
- Nový počet políček vodorovněpVýška
- Nový počet políček svislepublic void setKrokRozmer(int krok, int pSirka, int pVyska, java.lang.Object menic)
krok
- Nová bodová velikost políčkapŠířka
- Nový počet políček vodorovněpVýška
- Nový počet políček svisleměnič
- Objekt, který žádá o změnu rozměru. Jakmile je jednou
tento objekt nastaven, nesmí již rozměr plátna
měnit nikdo jiný.public void setMrizka(boolean zobrazit)
zobrazit
- Jestli mřížku zobrazovat.public void setMrizka(boolean zobrazit, boolean nad)
zobrazit
- Jestli mřížku zobrazovat.nad
- true
má-li se mřížka zobrazovat nad zobrazenými tvary,
false
má-li se zobrazovat pod nimi.public void setNazev(java.lang.String nazev)
název
- Nastavovaný názevpublic void setPozice(int x, int y)
x
- Vodorovná souřadnice aplikačního okna plátna.y
- Svislá souřadnice aplikačního okna plátna.public void setPozice(Pozice pozice)
pozice
- Požadovaná pozice aplikačního okna plátna na obrazovce.public void setRozmer(int sloupcu, int radku)
sloupců
- Nový počet políček vodorovněřádků
- Nový počet políček svislepublic void setRozmer(Rozmer rozmer)
rozměr
- Zadávaný rozměr v počtu políčekpublic void setViditelne(boolean viditelne)
viditelné
- logická hodnota požadované viditelnost (true=viditelné)public java.util.List<IKresleny> seznamKreslenych()
public static void test()
public java.lang.String toString()
toString
in class java.lang.Object
public void ulozJakoObrazek(java.io.File soubor)
soubor
- Soubor, do nějž se má obraz plátna uložitpublic void vratKresli()
nekresli()
. Předcházelo-li proto více volání metody
nekresli()
, začne se překreslovat až po odpovídajím počtu
zavolání metody vraťKresli()
.
java.lang.IllegalStateException
- Je-li metoda volána aniž by předcházelo odpovídající volání
nekresli()
.