Class CanvasManager

java.lang.Object
eu.pedu.lib20s.canvasmanager.CanvasManager

public final class CanvasManager
extends java.lang.Object
Třída CanvasManager slouží k jednoduchému kreslení na virtuální plátno a případné 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 CanvasManager, je volaní její statické metody getInstance().

Třída CanvasManager 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ě neodmazávaly. Aby vše správně fungovalo, je možno použít jeden ze dvou přístupů:

  • Manažer bude obsah plátna překreslovat v pravidelných intervalech bez ohledu na to, jestli se na něm udála nějaká změna či ne.
    • Výhodou tohoto přístupu je to, že se zobrazované objekty nemusí starat o to, aby se manažer dozvěděl, že se jejich stav změnil.
    • Nevýhodou tohoto přístupu je naopak to, že na neustálé (a často zbytečné) překreslování manažer spotřebovává jistou část výkonu procesoru, což může u pomalejších počítačů působit problémy.
       
  • Manažer překresluje plátno pouze na výslovné požádání.
    • Výhodou tohoto přístupu je úspora spotřebovaného výkonu počítače v období, kdy se na plátně nic neděje.
    • Nevýhodou tohoto přístupu je naopak to, že kreslené objekty musí na každou změnu svého stavu upozornit manažera, aby věděl, že má plátno překreslit.

Třída CanvasManager 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 CanvasManager, aby jej tato zařadila mezi spravované obrazce (sada metod add…). Přihlásit se však mohou pouze instance tříd, které implementují interfejs ICMPaintable.

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 CanvasManager, 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 remove(ICMPaintable).Zavoláním metody removeAll() 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 stopPainting(), 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 returnPainting(), která vrátí vykreslování do stavu před posledním voláním metody stopPainting(). Nemůže se tedy stát, že by se při zavolání metody stopPainting() v situaci, kdy je již vykreslování pozastaveno, začalo po následném zavolání returnPainting() hned vykreslovat. Po dvou voláních returnPainting() se začne vykreslovat až po dvou zavoláních returnPainting().

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 stopPainting() v situaci, kdy je již vykreslování pozastaveno, začalo po následném zavolání returnPainting() hned vykreslovat.

Každé zavolání metody stopPainting() musí být doplněno odpovídajícím voláním returnPainting(). Teprve když poslední returnPainting() odvolá první stopPainting(), bude překreslování opět obnoveno.

  • Method Summary

    Modifier and Type Method Description
    int add​(ICMPaintable... shapes)
    Není-li zadaný obrazec v seznamu malovaných, přidá jej na konec (bude se kreslit jako poslední, tj. na vrchu.
    boolean addAbove​(ICMPaintable presentShape, ICMPaintable addedShape)
    Přidá obrazec do seznamu malovaných tak, aby byl kreslen nad zadaným obrazcem.
    boolean addBehind​(ICMPaintable presentShape, ICMPaintable addedShape)
    Přidá obrazec do seznamu malovaných tak, aby byl kreslen pod zadaným obrazcem.
    void addKeyboardListener​(java.awt.event.KeyListener listener)
    Přihlásí posluchače událostí klávesnice.
    void addMouseListener​(java.awt.event.MouseListener listener)
    Přihlásí posluchače událostí myši.
    boolean addToBack​(ICMPaintable addedShape)
    Přidá obrazec do seznamu malovaných tak, aby byl kreslen pod zadaným obrazcem.
    boolean addToFront​(ICMPaintable addedShape)
    Přidá obrazec do seznamu malovaných tak, aby byl kreslen nad všemi obrazci.
    int fieldIndexOf​(int pixel)
    Převede bodovou souřadnici pixelu na souřadnici pole, v němž se nachází.
    NamedColor getBackgroundColor()
    Vrátí aktuální barvu pozadí.
    int getColumns()
    Vrátí počet sloupců plátna, tj. jeho políčkovou šířku.
    int getDrawLevel()
    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.
    NamedColor getGridColor()
    Vrátí barvu čar mřížky.
    int getHeight()
    Vrátí bodovou výšku plátna.
    int getIndexOf​(ICMPaintable shape)
    Vrátí getIndexOf zadaného prvku v seznamu kreslených prvků.
    static CanvasManager getInstance()
    Metoda umožnující získat odkaz na instanci správce plátna a případně zviditelnit jeho aplikační okno.
    static CanvasManager getInstance​(boolean visible)
    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 getMaxcColumns()
    Vrátí maximální možný počet sloupců plátna vzhledem k aktuálnímu velikosti kroku a obrazovky.
    int getMaxRows()
    Vrátí maximální možný počet řádků plátna vzhledem k aktuálnímu velikosti kroku a obrazovky.
    int getMaxStep()
    Vrátí maximální možnou bodovou velikost políčka vzhledem k aktuálnímu počtu sloupců a řádků a velikosti obrazovky.
    int getMaxStepFor​(int columns, int rows)
    Vrátí maximální možnou bodovou velikost políčka vzhledem k požadovanému počtu sloupců a řádků a velikosti obrazovky.
    java.lang.String getName()
    Vrátí aktuální název v titulkové liště okna plátna.
    Picture getPicture​(int x, int y, int width, int height)
    Vrátí instanci třídy Picture zobrazující zadaný výřez AktivníhoPlátna.
    Position getPosition()
    Vrátí vodorovnou souřadnici aplikačního okna plátna.
    int getRows()
    Vrátí počet řádků plátna, tj. jeho políčkovou výšku.
    Size getSize()
    Vrátí políčkový rozměr plátna, tj. šířku a výšku v polích.
    int getStep()
    Vrátí vzdálenost čar mřížky = bodovou velikost políčka.
    int getWidth()
    Vrátí bodovou šířku plátna.
    void changeTogether​(java.lang.Runnable action)
    Provede zadanou akci a na dobu jejího provádění vypne překreslování.
    boolean isGridVisible()
    Vrátí informaci o tom, je-li zobrazována mřížka.
    boolean isVisible()
    Poskytuje informaci o aktuální viditelnosti okna.
    java.util.List<ICMPaintable> listOfShapes()
    Vrátí nemodifikovatelný seznam všech spravovaných obrázků.
    int pixelIndexOf​(int field)
    Převede políčkovou souřadnici na bodovou souřadnici levého horního rohu daného pole.
    Position positionField2Point​(Position fieldPosition)
    Převede políčkovou pozici na bodovou pozici levého horního rohu daného políčka.
    Position positionPoint2Field​(Position pointPosition)
    Převede bodovou pozici na políčkovou pozici políčka, uvnitř nějž se daný bod nachází.
    boolean remove​(ICMPaintable shape)
    Odstraní zadaný obrazec ze seznamu malovaných.
    void removeAll()
    Vyčisti plátno, tj. vyprázdní seznam malovaných (odstraní z něj všechny obrazce).
    void removeKeyboardListener​(java.awt.event.KeyListener listener)
    Odhlásí posluchače klávesnice.
    void removeMouseListener​(java.awt.event.MouseListener listener)
    Odhlásí posluchače myši.
    void repaint()
    Vykreslí všechny elementy.
    void returnPainting()
    Vrátí překreslování do stavu před posledním voláním metody stopPainting().
    void saveAsPicture​(java.io.File file)
    Uloží obraz aktivního plátna do zadaného souboru.
    void setBackgroundColor​(NamedColor color)
    Nastaví pro plátno barvu pozadí.
    void setGridColor​(NamedColor gridColor)
    Nastaví barvu čar mřížky.
    void setGridVisible​(boolean visible)
    V závislosti na hodnotě parametru nastaví nebo potlačí zobrazování čar mřížky.
    void setGridVisible​(boolean visible, boolean over)
    Nastaví má-li se na plátně nastavovat mřížka a pokud ano, tak zda se čáry mřížky budou zobrazovat nad nebo pod zobrazovanými tvary.
    void setName​(java.lang.String name)
    Nastaví název v titulkové liště okna plátna.
    boolean setNotifySizeChanges​(boolean notify)
    Nastaví, zda se mají spravovaným tvarům hlásit změny velikosti kroku a vrátí původní nastavení.
    void setPosition​(int x, int y)
    Nastaví pozici aplikačního okna aktivního plátna na obrazovce.
    void setPosition​(Position position)
    Nastaví pozici aplikačního okna aktivního plátna na obrazovce.
    void setSize​(int columns, int rows)
    Nastaví rozměr plátna zadáním jeho políčkové výsky a šířky.
    void setSize​(Size rowsAndColumns)
    Nastaví rozměr plátna zadáním jeho políčkové výsky a šířky.
    void setStep​(int size)
    Nastaví vzdálenost čar mřížky = bodovou velikost políčka.
    void setStepAndSize​(int fieldSize, int colCount, int rowCount)
    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 setStepAndSize​(int fieldSize, int colCount, int rowCount, java.lang.Object changer)
    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 setStepToMax()
    Nastaví maximální možnou velikost kroku, aby se plátno ještě vešlo na obrazovku.
    void setVisible​(boolean visible)
    V závislosti na hodnotě svého parametru nastaví nebo potlačí viditelnost plátna na displeji.
    Size sizeField2Point​(Size fieldSize)
    Převede políčkový rozměr na bodový.
    Size sizePoint2Field​(Size pointSize)
    Převede bodový rozměr na políčkový.
    void stopPainting()
    Potlačí překreslování plátna, přesněji zvýší hladinu potlačení překreslování o jedničku.
    java.lang.String toString()
    Převede instanci na řetězec.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Method Details

    • getInstance

      public static CanvasManager getInstance()
      Metoda umožnující získat odkaz na instanci správce plátna a případně zviditelnit jeho aplikační okno. Vrací vsak pokaždé odkaz na stejnou instanci, protože instance plátna je jedináček.

      Pokud instance při volaní metody ještě neexistuje, metoda instanci vytvoří.

      Returns:
      Instance třídy CanvasManager
    • getInstance

      public static CanvasManager getInstance​(boolean visible)
      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é. Vrací vsak pokaždé odkaz na stejnou instanci, protože instance plátna je jedináček.

      Pokud instance při volaní metody ještě neexistuje, metoda instanci vytvoří.

      Parameters:
      visible - Má-li se zajistit viditelnost instance; false aktuálně nastavenou viditelnost nemění
      Returns:
      Instance třídy CanvasManager
    • getMaxStep

      public int getMaxStep()
      Vrátí maximální možnou bodovou velikost políčka vzhledem k aktuálnímu počtu sloupců a řádků a velikosti obrazovky.
      Returns:
      Maximální možná bodová velikost políčka
    • getMaxStepFor

      public int getMaxStepFor​(int columns, int rows)
      Vrátí maximální možnou bodovou velikost políčka vzhledem k požadovanému počtu sloupců a řádků a velikosti obrazovky.
      Parameters:
      columns - Požadovan počet sloupců
      rows - Požadovan počet řádků
      Returns:
      Maximální možná bodová velikost políčka
    • getMaxcColumns

      public int getMaxcColumns()
      Vrátí maximální možný počet sloupců plátna vzhledem k aktuálnímu velikosti kroku a obrazovky.
      Returns:
      Maximální možný počet sloupců plátna
    • getMaxRows

      public int getMaxRows()
      Vrátí maximální možný počet řádků plátna vzhledem k aktuálnímu velikosti kroku a obrazovky.
      Returns:
      Maximální možný počet řádků plátna
    • setStepAndSize

      public void setStepAndSize​(int fieldSize, int colCount, int rowCount)
      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. Při velikosti políčka = 1 se vypíná zobrazování mřížky.
      Parameters:
      fieldSize - Nová bodová velikost políčka
      colCount - Nový počet políček vodorovně
      rowCount - Nový počet políček svisle
    • setStepAndSize

      public void setStepAndSize​(int fieldSize, int colCount, int rowCount, java.lang.Object changer)
      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. Při velikosti políčka = 1 se vypíná zobrazování mřížky.
      Parameters:
      fieldSize - Nová bodová velikost políčka
      colCount - Nový počet políček vodorovně
      rowCount - Nový počet políček svisle
      changer - Objekt, který žádá o změnu rozměru. Jakmile je jednou tento objekt nastaven, nesmí již rozměr plátna měnit nikdo jiný.
    • getStep

      public int getStep()
      Vrátí vzdálenost čar mřížky = bodovou velikost políčka.
      Returns:
      Bodová velikost políčka
    • setStep

      public void setStep​(int size)
      Nastaví vzdálenost čar mřížky = bodovou velikost políčka. Při velikosti políčka = 1 se vypíná zobrazování mřížky.
      Parameters:
      size - Nová bodová velikost políčka
    • setStepToMax

      public void setStepToMax()
      Nastaví maximální možnou velikost kroku, aby se plátno ještě vešlo na obrazovku.
    • getColumns

      public int getColumns()
      Vrátí počet sloupců plátna, tj. jeho políčkovou šířku.
      Returns:
      Aktuální políčková šířka plátna (počet políček vodorovně)
    • getWidth

      public int getWidth()
      Vrátí bodovou šířku plátna.
      Returns:
      Aktuální bodová šířka plátna (počet bodů vodorovně)
    • getRows

      public int getRows()
      Vrátí počet řádků plátna, tj. jeho políčkovou výšku.
      Returns:
      Aktuální políčková výška plátna (počet políček svisle)
    • getHeight

      public int getHeight()
      Vrátí bodovou výšku plátna.
      Returns:
      Aktuální bodová výška plátna (počet bodů svisle)
    • getSize

      public Size getSize()
      Vrátí políčkový rozměr plátna, tj. šířku a výšku v polích.
      Returns:
      Aktuální políčkový rozměr plátna
    • setSize

      public void setSize​(int columns, int rows)
      Nastaví rozměr plátna zadáním jeho políčkové výsky a šířky.
      Parameters:
      columns - Nový počet políček vodorovně
      rows - Nový počet políček svisle
    • setSize

      public void setSize​(Size rowsAndColumns)
      Nastaví rozměr plátna zadáním jeho políčkové výsky a šířky.
      Parameters:
      rowsAndColumns - Zadávaný rozměr v počtu políček
    • isGridVisible

      public boolean isGridVisible()
      Vrátí informaci o tom, je-li zobrazována mřížka.
      Returns:
      Mřížka je zobrazována = true, není zobrazována = false.
    • setGridVisible

      public void setGridVisible​(boolean visible)
      V závislosti na hodnotě parametru nastaví nebo potlačí zobrazování čar mřížky.
      Parameters:
      visible - Jestli mřížku zobrazovat.
    • setGridVisible

      public void setGridVisible​(boolean visible, boolean over)
      Nastaví má-li se na plátně nastavovat mřížka a pokud ano, tak zda se čáry mřížky budou zobrazovat nad nebo pod zobrazovanými tvary.
      Parameters:
      visible - Jestli mřížku zobrazovat.
      over - true má-li se mřížka zobrazovat nad zobrazenými tvary, false má-li se zobrazovat pod nimi.
    • getGridColor

      public NamedColor getGridColor()
      Vrátí barvu čar mřížky.
      Returns:
      Barva čar mřížky
    • setGridColor

      public void setGridColor​(NamedColor gridColor)
      Nastaví barvu čar mřížky.
      Parameters:
      gridColor - Nově nastavovaná barva čar mřížky
    • isVisible

      public boolean isVisible()
      Poskytuje informaci o aktuální viditelnosti okna.
      Returns:
      Je-li okno viditelné, vrací true, jinak vrací false
    • setVisible

      public void setVisible​(boolean visible)
      V závislosti na hodnotě svého parametru nastaví nebo potlačí viditelnost plátna na displeji.
      Parameters:
      visible - logická hodnota požadované viditelnost (true=viditelné)
    • getBackgroundColor

      public NamedColor getBackgroundColor()
      Vrátí aktuální barvu pozadí.
      Returns:
      Nastavená barva pozadí
    • setBackgroundColor

      public void setBackgroundColor​(NamedColor color)
      Nastaví pro plátno barvu pozadí.
      Parameters:
      color - Nastavovaná barva pozadí
    • getDrawLevel

      public int getDrawLevel()
      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.
      Returns:
      Stav vnitřního semaforu:
      >0 - nebude se kreslit,
      =0 - kreslí se,
      <0 - chyba
    • getName

      public java.lang.String getName()
      Vrátí aktuální název v titulkové liště okna plátna.
      Returns:
      Aktuální název okna
    • setName

      public void setName​(java.lang.String name)
      Nastaví název v titulkové liště okna plátna.
      Parameters:
      name - Nastavovaný název
    • getPosition

      public Position getPosition()
      Vrátí vodorovnou souřadnici aplikačního okna plátna.
      Returns:
      Pozice levého horního rohu aplikačního okna plátna
    • setPosition

      public void setPosition​(int x, int y)
      Nastaví pozici aplikačního okna aktivního plátna na obrazovce.
      Parameters:
      x - Vodorovná souřadnice aplikačního okna plátna
      y - Svislá souřadnice aplikačního okna plátna
    • setPosition

      public void setPosition​(Position position)
      Nastaví pozici aplikačního okna aktivního plátna na obrazovce.
      Parameters:
      position - Požadovaná pozice aplikačního okna plátna na obrazovce
    • getPicture

      public Picture getPicture​(int x, int y, int width, int height)
      Vrátí instanci třídy Picture zobrazující zadaný výřez AktivníhoPlátna.
      Parameters:
      x - Vodorovná pozice požadovaného výřezu
      y - Svislá pozice požadovaného výřezu
      width - Šířka požadovaného výřezu v bodech
      height - Výška požadovaného výřezu v bodech
      Returns:
      Instance třídy Image zobrazující zadaný výřez
    • toString

      public java.lang.String toString()
      Převede instanci na řetězec. Používá se především při ladění.
      Overrides:
      toString in class java.lang.Object
      Returns:
      Řetězcová reprezentace dané instance.
    • repaint

      public void repaint()
      Vykreslí všechny elementy.
    • stopPainting

      public void stopPainting()
      Potlačí překreslování plátna, přesněji zvýší hladinu potlačení překreslování o jedničku. Návratu do stavu před voláním této metody se dosáhne zavoláním metody returnPainting().

      Metody stopPainting() a returnPainting() se tak chovají obdobně jako závorky, mezi nimiž je vykreslování potlačeno.

    • returnPainting

      public void returnPainting()
      Vrátí překreslování do stavu před posledním voláním metody stopPainting(). Předcházelo-li proto více volání metody stopPainting(), začne se překreslovat až po odpovídajím počtu zavolání metody returnPainting().
      Throws:
      java.lang.IllegalStateException - Je-li metoda volána aniž by předcházelo odpovídající volání stopPainting().
    • remove

      public boolean remove​(ICMPaintable shape)
      Odstraní zadaný obrazec ze seznamu malovaných. Byl-li obrazec v seznamu, překreslí plátno.
      Parameters:
      shape - Odstraňovaný obrazec
      Returns:
      Byl-li obrazec v seznamu, vrátí true, nebylo-li do odstraňovat, vrátí false
    • removeAll

      public void removeAll()
      Vyčisti plátno, tj. vyprázdní seznam malovaných (odstraní z něj všechny obrazce).
    • add

      public int add​(ICMPaintable... shapes)
      Není-li zadaný obrazec v seznamu malovaných, přidá jej na konec (bude se kreslit jako poslední, tj. na vrchu. Byl-li obrazec opravdu přidán, překreslí plátno. Objekty budou vždy kresleny v getIndexOf, v němž byly přidány do správy, tj. v seznamu parametrů zleva doprava a dříve zaregistrované objekty před objekty zaregistrovanými později.
      Parameters:
      shapes - Přidávané obrazce
      Returns:
      Počet skutečně přidaných obrazců
    • addAbove

      public boolean addAbove​(ICMPaintable presentShape, ICMPaintable addedShape)
      Přidá obrazec do seznamu malovaných tak, aby byl kreslen nad zadaným obrazcem. Pokud již v seznamu byl, jenom jej přesune do zadané pozice.
      Parameters:
      presentShape - Obrazec, který má byt při kreslení pod přidávaným obrazcem
      addedShape - Přidávaný obrazec
      Returns:
      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é
    • addBehind

      public boolean addBehind​(ICMPaintable presentShape, ICMPaintable addedShape)
      Přidá obrazec do seznamu malovaných tak, aby byl kreslen pod zadaným obrazcem. Pokud již v seznamu byl, jenom jej přesune do zadané pozice.
      Parameters:
      presentShape - Obrazec, který má byt při kreslení nad přidávaným obrazcem
      addedShape - Přidávaný obrazec
      Returns:
      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é
    • addToFront

      public boolean addToFront​(ICMPaintable addedShape)
      Přidá obrazec do seznamu malovaných tak, aby byl kreslen nad všemi obrazci. Pokud již v seznamu byl, jenom jej přesune do požadované pozice.
      Parameters:
      addedShape - Přidávaný obrazec
      Returns:
      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é
    • addToBack

      public boolean addToBack​(ICMPaintable addedShape)
      Přidá obrazec do seznamu malovaných tak, aby byl kreslen pod zadaným obrazcem. Pokud již v seznamu byl, jenom jej přesune do zadané pozice.
      Parameters:
      addedShape - Přidávaný obrazec
      Returns:
      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é
    • changeTogether

      public void changeTogether​(java.lang.Runnable action)
      Provede zadanou akci a na dobu jejího provádění vypne překreslování. Metoda se používá v situaci, kdy se mění složitější objekt a potřebujeme, aby se zobrazil až v okamžiku, kdy budou všechny měnící se části již změněné.
      Parameters:
      action - Akce provádějící požadované změny
    • getIndexOf

      public int getIndexOf​(ICMPaintable shape)
      Vrátí getIndexOf zadaného prvku v seznamu kreslených prvků. Prvky se přitom kreslí v rostoucím getIndexOf, takže obrazec s větším poradím je kreslen nad obrazcem s menším poradím. Není-li zadaný obrazec mezi kreslenými, vrátí -1.
      Parameters:
      shape - Objekt, na jehož kreslicí pořadí se dotazujeme
      Returns:
      Pořadí obrazce; prvý kresleny obrazec má pořadí 0. Není-li zadaný obrazec mezi kreslenými, vrátí -1.
    • listOfShapes

      public java.util.List<ICMPaintable> listOfShapes()
      Vrátí nemodifikovatelný seznam všech spravovaných obrázků.
      Returns:
      Požadovaný seznam
    • fieldIndexOf

      public int fieldIndexOf​(int pixel)
      Převede bodovou souřadnici pixelu na souřadnici pole, v němž se nachází. Pracuje i se zápornými souřadnicemi.
      Parameters:
      pixel - Převáděná bodová souřadnice
      Returns:
      Políčková souřadnice pole s bodem o zadané bodové souřadnici
    • pixelIndexOf

      public int pixelIndexOf​(int field)
      Převede políčkovou souřadnici na bodovou souřadnici levého horního rohu daného pole. Pracuje i se zápornými souřadnicemi.
      Parameters:
      field - Převáděná políčková souřadnice
      Returns:
      Bodová souřadnice levého horního rohu daného pole
    • positionField2Point

      public Position positionField2Point​(Position fieldPosition)
      Převede políčkovou pozici na bodovou pozici levého horního rohu daného políčka.
      Parameters:
      fieldPosition - Políčková pozice
      Returns:
      Odpovídající bodová pozice
    • positionPoint2Field

      public Position positionPoint2Field​(Position pointPosition)
      Převede bodovou pozici na políčkovou pozici políčka, uvnitř nějž se daný bod nachází.
      Parameters:
      pointPosition - Bodová pozice
      Returns:
      Odpovídající políčková pozice
    • sizeField2Point

      public Size sizeField2Point​(Size fieldSize)
      Převede políčkový rozměr na bodový.
      Parameters:
      fieldSize - Políčková pozice
      Returns:
      Odpovídající bodová pozice
    • sizePoint2Field

      public Size sizePoint2Field​(Size pointSize)
      Převede bodový rozměr na políčkový. Políčkový rozměr je přitom definován jako největší rozměr, při němž se výsledná políčkově definovaná oblast vejde do oblasti zadaného bodového rozměru.
      Parameters:
      pointSize - Bodový rozměr
      Returns:
      Odpovídající políčkový rozměr
    • setNotifySizeChanges

      public boolean setNotifySizeChanges​(boolean notify)
      Nastaví, zda se mají spravovaným tvarům hlásit změny velikosti kroku a vrátí původní nastavení.
      Parameters:
      notify - Požadované nastavení (true=hlásit, false=nehlasit).
      Returns:
      Původní nastavení
    • addKeyboardListener

      public void addKeyboardListener​(java.awt.event.KeyListener listener)
      Přihlásí posluchače událostí klávesnice.
      Parameters:
      listener - Přihlašovaný posluchač
    • removeKeyboardListener

      public void removeKeyboardListener​(java.awt.event.KeyListener listener)
      Odhlásí posluchače klávesnice.
      Parameters:
      listener - Odhlašovaný posluchač
    • addMouseListener

      public void addMouseListener​(java.awt.event.MouseListener listener)
      Přihlásí posluchače událostí myši.
      Parameters:
      listener - Přihlašovaný posluchač
    • removeMouseListener

      public void removeMouseListener​(java.awt.event.MouseListener listener)
      Odhlásí posluchače myši.
      Parameters:
      listener - Odhlašovaný posluchač
    • saveAsPicture

      public void saveAsPicture​(java.io.File file)
      Uloží obraz aktivního plátna do zadaného souboru.
      Parameters:
      file - Soubor, do nějž se má obraz plátna uložit