To nemůžeš vykreslovat všechno no.
Musíš vykreslit jenom to, co má být zrovna vidět.
Třeba řekněme, že máš mapu, která reprezentuje 100km čtverečních.
Určíš si, že 1km = 100px.
Máš třeba nějaký ten JPanel, který má rozměry 100x100px, tzn. vždycky zobrazuje 1km čtvereční té mapy.
Aby si se v té mapě mohl pohybovat, tak musíš mít taky scrollbary nebo něco podobného.
Budeš mít třeba vertikální scrollbar o délce 100px.
Vezmeš si celkovou délku té mapy (1km = 100px, čili 10x100px, protože mapa má 100km čtverečních, což je 10kmx10km, že.).
Lze teda scrollovat vertikálně i horizontálně o 1000px.
Protože vždycky zobrazuješ 100px, tak si uděláš 100/1000, což je 0.1. Tzn. i ten ovladač scrollbaru musí zabrat 0.1 jeho maximální délky, aby to vizuálně reflektovalo, kolik z celkového prostoru se zobrazuje.
Akorát potom ve chvíli, kdy máš tu mapu třeba obrovskou a bude ti vycházet, že má ovladač scrollbaru
zabrat třeba 0.1px, tak to samozřejmě nejde a ten ovladač bude mít vždycky nějakou minimální velikost.
Proto jsou tam i ty šipečky dole, aby si se mohl pohybovat i jakoby s menším rozlišením, než ti umožňuje
ten ovladač scrollbaru. Třeba když posun scrollbaru o 1 pixel by měl znamenat posun mapy o 1000px, ale
tvůj viewport je jen 100px, tak uživatel použije ty šipečky. Kliknutí na šipečku pak posune mapu, ale nezmění pozici scrollbaru.
Vždycky si to prostě převádíš jakoby do intervalu 0-1. Zobrazuju 50% mapy, tak ovladač scrollbaru
zabere 50% jeho celkové velikosti.
Pak si při každým překreslení zeptáš scrollbaru na jaký je pozici. Třeba 0.2-0.3, tzn. by jsi měl zobrazovat 0.2-0.3 té mapy. Celková velikost mapy je 1000px, tzn. 0.2x1000 až 0.3x1000.
No a to tam vykreslíš do toho okna 100x100.
Musíš si ty data kde je jaký uzel ukládat nějak chytře, aby si rychle zjistil, co je v jaké oblasti.
A taky musíš vykreslovat věci, co jsou viditelné jen částečně. To se většinou dělá tak, že pak kreslíš jakoby
do záporných souřadnich toho grafického kontextu, čímž se to ořízně přesně tam kde má.
Žádné jednoduché řešení na tyhle věci není, prostě musíš si to naprogramovat celé fakt sám, pokud už musíš
optimalizovat vykreslování na téhle úrovni.
Dělají to třeba textové editory, aby nevykreslovali celý text, tak vždycky podle výšky řádku zjistí, co je vidět
a vykreslují jen to.
Sorry jsem ti to vysvětlil asi moc složitě, ale tu myšlenku pochytíš. Je to vlastně hrozně jednoduchý.