Ich habe sowas schon mal gebaut. Ich bin damals wie folgt vorgegangen:
Als erstes habe ich mir eine Klasse Tile gebaut, die ich ständig verwendet habe. Tile hat von Rectangle geerbt (wg. Koordinaten und Längen/Breite). Außerdem habe ich als Instanzvariable eine Nummer eingebaut. Die Klasse Tile enthält bei mir als BildInformation nur diese Nummer!
Danach habe ich eine Klasse zur Verwaltung der Einzelbilder geschrieben. Diese hat die Bildinformationen geladen numeriert und in einer Map gespeichert.
Anschließend habe ich das erste Panel gebastelt zur Anzeige der verfügbaren Tiles. Dieses hatte in einem Vector soviele Tiles gespeichert, wie es Einzelbilder gab. Dabei habe ich es so angestellt, daß beim Zeichnen der Tiles die Bildinformation über die Nummer, die im Tile gespeichert ist, jedesmal aus der Bildverwaltungsklasse abgeholt wird. Damit habe ich an der Stelle schon mal die Bilddaten nicht gespeichert.
Wenn jetzt jemand auf ein Bild geklickt hat, habe ich über einen MouseListener und der Methode intersects(..) die von Rectangle geerbt wurde, mir die Nummer des Bildes gemerkt, das ausgwählt wurde (mehr nicht).
Zum Zeichnen der Bilder hatte ich wieder eine Klasse, die von Panel erbt. Wichtig war mir, daß ich hier an keine fest Größe gebunden bin, ich wollte auch scrollbare Maps bauen können. Daher habe ich eine Möglichkeit eingebaut, die Größe des Panels (das in eine ScrollPane eingebettet war) zu ändern.
Wenn nun jemand in das Panel geklickt hat, habe ich errechent, wo ich das entsprechende Tile positionieren muß, damit später eine lückenlose Karte entsteht. Dann habe ich ein neues Tile instanziiert und in einem Vector gespeichert. Auch hier werden keine Bilddaten gespeichert, sondern diese jedesmal über die Nr. im Tile aus der Verwalterklasse abgeholt.
Damit ist es möglich, beliebig große Karte zu zeichnen. So konnte ich Karten recht einfach zusammenklicken. Es war allerdings etwas mühsehlig, eine größere Fläche einzeln zusammenzuklicken. Daher habe ich noch einen MouseMotionListener eingebaut, um eine Reihe von Tiles durch ziehen der Maus erstellen zu können.
Zum Zeichnen habe ich in beiden Panels die paintComponent-Mehtode überschrieben und über die Koordinaten des Tiles die Bildinformationen gezeichnet.
Und das ist es so im Groben.
Das Ganze sieht so aus:
Hier wurde ein recht primitives Tileset verwendet. Der rote Rahmen zeigt die aktuelle Kartengröße an.