Die Image Library wird verwendet um in einer Applikation auf einfachste Art und Weise auf Bilder zuzugreifen. Üblicherweise werden Bilder im classpath einer Applikation abgelegt und mit dem vollständigen Ressource-Pfad geladen, z.B.:

Toolkit.class.getResourceAsStream("/javax/rad/genui/images/32x32/about.png");

Die Image Library erlaubt einerseits den Zugriff über den vollständigen Ressource-pfad und andererseits den Zugriff über vordefinierte und/oder benutzerdefinierte Bildnamen. Nachfolgendes Beispiel lädt das Bild about.png, aus unserem vorherigen Beispiel, über den Ressource-Pfad und den vordefinierten Bildnamen:

//possible
UIImage.getImage("/javax/rad/genui/images/32x32/about.png");
 
//recommended
UIImage.getImage(UIImage.ABOUT_LARGE);

Die Image Library enthält bereits wichtige Applikations- Bilder/Icons die üblicherweise Verwendung finden, wie z.B.:
SAVE_SMALL, SAVE_LARGE,
COPY_SMALL, COPY_LARGE,
PASTE_SMALL, PASTE_LARGE,
SEARCH_SMALL, SEARCH_LARGE,
uvm.

Für jedes vordefinierte Bild existiert eine kleine (16 x 16px) und eine große Variante (24 x 24px). Die kleinere Variante eignet sich für die Verwendung in Menüs und Buttons, die große Variante für Hinweise, Detailanzeigen oder für Toolbars.

Für eine vollständige Liste der vordefinierten Bilder verwenden Sie bitte die Klasse UIImage.

Durch die Image Library und die Verwendung von Bildnamen, anstatt von Ressource-Pfad Angaben, ist es sehr einfach ein einzelnes Bild an zentraler Stelle, für die gesamte Applikation auszutauschen. Es ist nicht nötig in jedem Work-Screen nach dem Bild zu suchen und den Klassenpfad zu ändern. Die Änderung der Bild Definition ist ausreichend.

Anwendungsbeispiel

Unsere Applikation verwendet ausschließlich die Image Library für die Darstellung von Bildern/Icons. Wir verwenden vordefinierte Bilder und definieren zusätzlich unsere eigenen Bilder die nicht in der Image Library enthalten sind. Außerdem ändern wir einige vordefinierte Bilder da diese nicht unserem Geschmack entsprechen.

Im Konstruktor unserer Applikation definieren wir die Änderungen:

//We don't like the predefined add/remove images
UIImage.setImageMapping(UIImage.ADD_SMALL, 
                        "/com/sibvisions/apps/packung/images/16x16/new.png");
UIImage.setImageMapping(UIImage.REMOVE_SMALL, 
                        "/com/sibvisions/apps/packung/images/16x16/delete.png");
 
//We don't need the large images
UIImage.setImageMapping(UIImage.ADD_LARGE, null);
UIImage.setImageMapping(UIImage.REMOVE_LARGE, null);
 
//We have special images which are not predefined
UIImage.setImageMapping(PackungApplication.IMAGE_NOBODY, 
                        "/com/sibvisions/apps/packung/images/nobody.png");

n einem unserer Work-Screens verwenden wir nun die Image Library für die Bilder unserer Buttons:

UIButton butOK = new UIButton();
butOK.setImage(UIImage.getImage(UIImage.OK_SMALL));

Weiters ist es möglich anstatt der Klassenpfad Angaben auch die Bildnamen zu verwenden. Das ist dann der Fall, wenn keine IImage Instanz benötigt wird wie z.B.:

/** Yes/ No Choice editor. */
new UIChoiceCellEditor(new Object [] {"Y", "N"},
                       new String [] {UIImage.CHECK_YES_SMALL,
                                      UIImage.CHECK_SMALL},
                                      UIImage.CHECK_SMALL);

Im Gegensatz zur Verwendung ohne Image Library:

/** Yes/ No Choice editor. */
new UIChoiceCellEditor(new Object [] {"Y", "N"},
                       new String [] {"/javax/rad/genui/images/16x16/check_yes.png",
                                      "/javax/rad/genui/images/16x16/check.png"},
                                      "/javax/rad/genui/images/16x16/check.png");

Wenn wir uns nun dazu entscheiden die Bilder der Applikation zu ändern, so ist es ausreichend unsere Definitionen zu ändern und nicht die gesamte Applikation zu durchsuchen:

UIImage.setImageMapping(UIImage.CHECK_YES_SMALL, 
                        "/com/sibvisions/apps/packung/images/16x16/packung_check_yes_small.png");
UIImage.setImageMapping(UIImage.CHECK_SMALL, 
                        "/com/sibvisions/apps/packung/images/16x16/packung_check_small.png");


Hinweis

Die Image Library speichert die bereits verwendeten Bilder und verhindert dadurch das ein und dasselbe Bild mehrfach geladen wird. Das spart nicht nur Hauptspeicher sondern wirkt sich auch positiv auf die Performance aus.