10.5Icon und ImageIcon für Bilder auf Swing-Komponenten
Beschriftungen und Schaltflächen können unter Swing neben dem Text auch kleine Grafiken anzeigen. Der Schlüssel für Grafiken auf Swing-Komponenten liegt in der Schnittstelle Icon. Sollen vorhandene Grafiken einfach geladen werden, kommt die Klasse ImageIcon zum Einsatz, die Icon implementiert.
[zB]Beispiel
Die folgende Zeile reicht aus, um ein Icon zu laden:
10.5.1Die Klasse ImageIcon
Unser folgendes Beispiel soll eine Grafik auf eine Schaltfläche setzen. Nach dem Aktivieren der Schaltfläche wechselt ein Listener die Grafik:
Listing 10.5com/tutego/insel/ui/swing/ImageIconDemo.java, Ausschnitt
URL resource2 = ImageIconDemo.class.getResource( "/images/user-trash.png" );
Icon icon1 = new ImageIcon( resource1 );
Icon icon2 = new ImageIcon( resource2 );
JButton button = new JButton();
button.setIcon( icon1 );
frame.add( button );
frame.add( new JLabel( icon2 ) );
Das ausgeführte Beispiel ergibt folgendes Bild:
Abbildung 10.19JButton mit Bild
Die Konstruktoren von JLabel und JButton nehmen ein Icon an und können dieses nach dem Erzeugen auch mit setIcon(Icon) ändern. Das obere Beispiel zeigt die Variante setIcon(Icon) für die Schaltfläche, es hätte aber auch new JButton(icon1) funktioniert. Das Beispiel nutzt den mit URL parametrisierten ImageIcon-Konstruktor. Die URL liefert getResource(String), um Ressourcen – also die beiden Bilder – vom Klassenpfad zu beziehen. Wenn sich ImageIconDemo im Verzeichnis BASE/com/tutego/insel/ui/swing befindet, liegt die Grafik unter BASE/images/user‐trash-full.png.
[»]Hinweis
Ein Container bietet keine Methode add(Icon), sondern nur add(Component). Ein Icon-Objekt ist nicht vom Typ Component und kann daher auch nicht als Argument für eine add(…)-Methode dienen. Icons müssen erst auf Komponenten wie ein JLabel gesetzt werden, um sich darstellen zu lassen. Dennoch gibt es einige Konstruktoren/Methoden, die Icon-Objekte aufnehmen, etwa JLabel, JButton, JTabbedPane, JOptionPane, DefaultTreeCellRenderer.
ImageIcon-API
Ein Exemplar der Klasse ImageIcon kann mit vielen Parametern erzeugt werden. Die interessantesten stammen aus einer Datei und von einer URL. Ist die Grafik ein Animated GIF, so stellt Swing es wirklich animiert dar. Swing berücksichtigt ebenso die Transparenz der Bilder.
Abbildung 10.20Klassendiagramm von ImageIcon
Die wichtigsten Konstruktoren:
implements Accessible, Icon, Serializable
ImageIcon(byte[] imageData)
ImageIcon(Image image)
ImageIcon(String filename)
ImageIcon(URL location)
[»]Hinweis
Die Klasse ImageIcon implementiert Serializable (die Schnittstelle Icon erweitert sie nicht). Doch die Serialisierung schreibt vom ImageIcon lediglich das interne unkomprimierte Byte-Feld mit den Farbwerten, und das Datenvolumen ist in der Regel größer als das Bild, aus dem das ImageIcon konstruiert wurde.