Java Reference
In-Depth Information
public void setImage(BufferedImage img) {
this.image = img;
setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
repaint();
invalidate();
}
@Override
protected void paintComponent(Graphics g) {
if (image != null)
g.drawImage(image, 0, 0, this);
}
}
Listing 12.15
ImageComponent von JComponent abgeleitet
Die abgeleitete Komponente besitzt ein zusätzliches Attribut vom Typ
BufferedImage
zur Aufnahme eines Bildes. Der Konstruktor ruft lediglich den Konstruktor der Basis-
klasse auf. Die Setter-Methode
setImage
übernimmt als Argument ein
BufferedImage
.
Damit lässt sich ein neues Bild zuordnen. Hat sich das Bild geändert, sollte auch die
Eigenschaft
PreferredSize
mit dem entsprechenden Setter angepasst werden. In diesem
Attribut wird die Größe festgehalten, die gerade ausreicht, die Komponente komplett
darzustellen. Der Aufruf von
repaint()
sorgt für das Neuzeichnen der Komponente,
damit das neue Bild auch sichtbar wird. Schließlich wird mit
invalidate()
der gesamte
Bereich der Komponente als ungültig erklärt, damit beim nächsten Neuzeichnen der
gesamte Bereich neu gezeichnet wird.
Die Methode
paintComponent
, die für das Zeichnen der Komponente zuständig ist, muss
überschrieben werden. Ihr wird ein Objekt der Klasse
Graphics
übergeben. Diese Klasse
besitzt zahlreiche Methoden zum Zeichnen auf unterschiedlichsten Geräten. Wenn die
Komponente ein Bild enthält, wird es in die Komponente (
this
) mit dem Ursprung x = 0,
y = 0, d. h. in die linke obere Ecke gezeichnet. Da
PreferredSize
auf die Bildgröße gesetzt
wurde, füllt das Bild die gesamte Komponente aus.
Die erstellte Komponente ist als Nachkomme von
JComponent
geeignet, um in einem
JScrollPane
-Behälter untergebracht zu werden. Der Frame der Anwendung sollte seine
Größe an dem darzustellenden Bild ausrichten, und das Bild sollte innerhalb des Frames
immer zentral platziert sein. Beim Vergrößern oder Verkleinern des Frames durch den
Anwender sollte das Bild seine Größe entsprechend mit ändern. Dadurch wird es dann
aber unter Umständen erforderlich, Scrollbalken einzublenden. Die letzte Aufgabe