16.4 Icon 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 Klasse ImageIcon beziehungsweise in der Schnittstelle Icon, die ImageIcon implementiert. 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.
Beispiel Die folgende Zeile reicht aus, um ein Icon zu laden: Icon icon = new ImageIcon( "image.gif" ); |
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. |
Unser folgendes Beispiel soll auf eine Schaltfläche eine Grafik setzen. Nach dem Aktivieren der Schaltfläche wechselt ein Listener die Grafik.
Listing 16.5 com/tutego/insel/ui/swing/ImageIconDemo.java, Ausschnitt
URL resource1 = ImageIconDemo.class.getResource( "/images/user-trash-full.png" );
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 16.3 JButton mit Bild
Die Konstruktoren von JLabel und JButton nehmen ein Icon an und können dieses nach dem Erzeugen auch mit setIcon() ändern. Das obere Beispiel zeigt die Variante setIcon() für die Schaltfläche, es hätte aber auch new JButton(icon1) funktioniert.
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. |
Icon-Sammlungen
Wer für seine grafischen Oberflächen Icons einsetzt, der findet beim Tango Desktop Projekt (http://tango.freedesktop.org/) viele Standard-Icons in den Auflösungen 16×16, 22×22, 32×32 und ebenso SVG. Die Webseite http://www.iconfinder.net/ bietet eine Suche nach bestimmen Begriffen und findet freie Icons nach weiteren Kriterien wie Hintergrundfarbe/Transparenz oder Größe.
Die beiden Linux-Oberflächen KDE und Gnome bieten viele Grafiken, die sich je nach Lizenzmodell auch in kommerziellen Produkten nutzen lassen. Für KDE ist http://www.kde-look.org/ eine zentrale Seite für das Aussehen. Ein Beispiel: Crystal Clear (http://www.everaldo.com/, http://commons.wikimedia.org/wiki/Crystal_Clear) steht unter der Lizenzform LGPL und ist damit auch für kommerzielle Anwendungen nutzbar.