Image
Objekte geladen. Bilder die an vielen Stellen und häufig in einer RCP Applikaiton verwendet werden, sollten mit der ImageRegistry verwaltet werden. Dieser Artikel zeigt dies in einem einfachen Beispiel wie Bilder in und aus der ImageRegistry geladen werden. Weiterhin werden drei Möglichkeiten wie ein Pfad zu einem Bild angegeben werden kann vorgestellt.
Schritt 1: erstelle eine RCP Eclipse Anwendung die auf dem Template "RCP Application with a view" basiert
Schritt 2: kopiere das Bild "alt_window_32.gif" in das Package in dem sich die
View
Klasse befindet. Das Projektverzeichnis sollte wie in Abbildung 1 dargestellt aussehen.![]() |
Abbildung 1 |
View
müssen alle inneren Klassen und Attribute gelöscht werden. Der Inhalt der Methoden createPartControl
und setFocus
sollte ebenfalls gelöscht werden. Der Inhalt der Methode createPartControl
wird mit dem Inhalt wie im Programmauszug 1 ersetzt.
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.part.ViewPart;
public class View extends ViewPart {
public static final String ID =
"com.blogspot.javadingsda.testimageregistry.view";
public void createPartControl(Composite parent) {
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
parent.setLayout(layout);
ImageRegistry reg = Activator.getDefault().getImageRegistry();
Label label = new Label(parent, SWT.NONE);
GridData gridData = new GridData();
label.setData(gridData);
label.setImage(reg.get("testpic"));
label = new Label(parent, SWT.NONE);
gridData = new GridData();
label.setData(gridData);
label.setImage(reg.get("testpic2"));
label = new Label(parent, SWT.NONE);
gridData = new GridData();
label.setData(gridData);
label.setImage(reg.get("testpic3"));
}
public void setFocus() {}
}
Programmauszug 1
Schritt 4: das Laden der Bilder in die
ImagerRegistry
kann an beliebiger Stelle erfolgen. Es sollte nur vor der ersten Verwendung erfolgen. Wir entscheiden und dies in der Perspective
Klasse zu tun. Programmauszug 2 zeigt die modifizierte Klasse.Bei Lösung 1 und Lösung 2 wird das Bild aus dem
icons
Verzeichnis geladen. Lösung 3 läd das Bild aus dem Package in dem sich die View.class
befindet.
import java.net.URL;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
import org.osgi.framework.Bundle;
public class Perspective implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
layout.setEditorAreaVisible(false);
layout.setFixed(true);
ImageRegistry regystry =
Activator.getDefault().getImageRegistry();
String pathStr = "icons/alt_window_32.gif";
Path path = new Path(pathStr);
// Lösung 1
Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
URL url = FileLocator.find(bundle, path, null);
ImageDescriptor imageDescriptor =
ImageDescriptor.createFromURL(url);
regystry.put("testpic", imageDescriptor);
// Lösung 2
ImageDescriptor imageDescriptor2 =
Activator.getImageDescriptor(pathStr);
regystry.put("testpic2", imageDescriptor2);
// Lösung 3
ImageDescriptor imageDescriptor3 =
ImageDescriptor.createFromFile(View.class, "alt_window_32.gif");
regystry.put("testpic3", imageDescriptor3);
}
}
Programmauszug 2
Die gezeigten Beispiele bauen auf folgenden Quellen:
//http://www.javalobby.org/forums/thread.jspa?threadID=16557
//http://www.eclipse.org/articles/Article-RCP-2/tutorial2.html
//http://www.eclipse.org/articles/Article-Using%20Images%20In%20Eclipse/Using%20Images%20In%20Eclipse.html
//http://www.eclipse.org/articles/Article-SWT-images/graphics-resources.html
Keine Kommentare:
Kommentar veröffentlichen