Sonntag, 29. Mai 2011

Eclipse RCP - Linksammlung (deutsch)

Hier eine Linksammlung zu deutschsprachigen Seiten:

http://www.prozesse-und-systeme.de/eclipseRuntimeClassloading.html

Montag, 23. Mai 2011

SWT TreeViewer – Ereignisse beim öffnen/schließen eines Baumkontens im TreeViewer



Der folgende Beitrag zeigt wie auf das Öffnen oder Schließen eines Knotens eines TreeViewers reagiert werden kann.

Um auf das öffenen oder schließen eines Knotens zu reagieren muss dem TreeViewer ein Listener hinzugefügt werden, der das Interface ITreeViewerListener implementiert. Dieses Interface besitzt zwei Methoden. treeExpanded(), die aufgerufen wird, wenn ein Knoten geöffnet wrid und treeCollapsed(), die beim Schließen eines Knotens aufgerufen wird. 

TreeViewer tw = new TreeViewer(parent);
tv.addTreeListener(new ITreeViewerListener() {
  @Override
  public void treeExpanded(TreeExpansionEvent arg0) {
    // TODO Auto-generated method stub
  }


  @Override
  public void treeCollapsed(TreeExpansionEvent arg0) {
    // TODO Auto-generated method stub
  }
});

Eine Referenz auf den Knoten der gerade geöffnet oder geschlossen wurde erhält man mit der Methode getElement() der TreeExpansionEvent Klasse. Hier ein Beispiel:

@Override
public void treeExpanded(TreeExpansionEvent arg0) {
  if (arg0.getElement() instanceof MyClass){
    // irgend ein Code der beim öffnen des Knotes irgendwas macht
  }
}

MyClass repräsentiert dabei eine selbst geschribene Klasse die einen Knoten im TreeViewer darstellt. 

 



Sonntag, 15. Mai 2011

Eclipse RCP - Bild laden

Angenommen das Bild java.png befindet sich im Verzeichnis pluginprojekt/icons. Das Verzeichniss pluginprojekt ist dabei das Projektverzeichniss. Um dieses Bild in einem org.eclipse.swt.graphics.Image Objekt zu erzeugen werden fogende Zeilen Code benötigt:


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.swt.graphics.Image;
import org.osgi.framework.Bundle;

// ... 

Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID); 
ImageDescriptor imgDescr = ImageDescriptor.createFromURL(
    FileLocator.find(bundle,new Path("icons/java.png"),null)); 
Image img = imgDescr.createImage();


Die Activator.PLUGIN_ID ist die ID des Plugins. Die Klasse Activator wudre mit der Erzeugung des Mail Template erzeugt.

Dies ist eine einfach Lösung, bei der das Bild in den Speicher geladen wird. Prinzipiell sollen die Bilder in einer Anwendung verwaltet werden. Ein Hands-On Tutoiral wie Bilder mit der ImageRegistry geladen und angezeigt werden können findet ihr im Posting Eclipse RCP - Bilder für Fortgeschrittene.

Eclipse - Debugger hält nicht an

Was machen wenn der verflixte Debuger nicht anhält und Breakpoints überspringt. Das Motto ist wie immer: "Einfach wenn man es kennt!"
Hier zwei Tips zu möglichen Ursachen:
Zu aller erst ist es wichtig wie der Breakpoint angezeigt wird. 

Ist es ein blauer durchgestrichener Punkt, dann sind alle Breakpoints deaktiviert. Diese können in der Debug Perspective wieder aktiviert werden. In der Debug Perspective befindet sich die View Breakpoints. Dort muss der Button mit diesem einem Zeichen (durchgestrichener Punkt) deaktiviert werden und schon sind die Breakpoints aktiv. 

Ist der Breakpoint hingegen ein weißer punkt, dann ist er deaktiviert. Um diesen Breakpoint zu aktivieren muss in der Debug Perspective in der Breakpoint View dieser Breakpoint aktiviert werden. Dazu muss in der Breakpoint View, in der Zeile mit dem Breakpoint, ein Häckchen gesetzt werden.

Sonntag, 8. Mai 2011

TreeViewer - Methoden des ITreeContentProvider

Um einen einfachen TreeViewer anzuzeigen benötigt der TreeViewer einen Provider (von Typ IContentProvider) der den Inhalt des Trees zur Verfügung stellt. Im folgenden Abschnitt werden die wichigsten Methoden und deren Reihenfolge erläutert.

Die unten genannten Methoden des Interface IContentProvider müssen implementiert werden.



  • public Object[] getChildren(Object arg0) 
  • public Object getParent(Object arg0) 
  • public boolean hasChildren(Object arg0) 
  • public Object[] getElements(Object arg0) 
  • public void dispose() 
  • public void inputChanged(Viewer arg0, Object arg1, Object arg2) 

public Object[] getChildren(Object arg0) 

Gibt in Abhängigkeit vom Knoten arg0 die Kinderknoten in einem Array wieder. Wenn der Knoten arg0 keine Kinderknoten besitzt (und somit Blatt ist), dann muss diese Methode ein leeres Array zurückgeben. Ein null führt zu einer Exception. 

public Object getParent(Object element)

Die getParent Methode gibt den Elternknoten des element Objektes wieder. 

Die getElements Methode hat die Aufgabe die Root Knoten des Baumes wiederzugeben.


public boolean hasChildren(Object element)

Die hasChildren Methode zeigt an ob das element Objekt noch Kinderknoten besitzt.


public void dispose() 

Die dispose Methode ist für alle notwendigen Aufräumarbeiten zuständig, wenn das IContentProvider Objekt dereferenziert wird.


public void inputChanged() 

Die inputChanged Methode wird aufgerufen, sobald sich der Input des IContantProvider geändert hat.

Ein einfaches Beispiel TreeViewer findet Ihr hier im Blog.

... Fortsetzung Folgt!

TreeViewer - Knoten per Doppelklick öffnen

Um bei einem TreeViewer die Baumknoten per Doppelklick zu öffnen, muss dem TreeViewer ein OpenListener hinzugefügt werden. Hier der Beispielcode von der Seite EclipseZone. Dieser hat in meinem Code auf Anhieb funktioniert.


// tv ist ein TreeViewer Objekt
tv.addOpenListener(new IOpenListener() {
  public void open(final OpenEvent event) {
Object firstElement = ((IStructuredSelection) event
.getSelection()).getFirstElement();
if (tv.getExpandedState(firstElement)) {
tv.collapseToLevel(firstElement,
AbstractTreeViewer.ALL_LEVELS);
} else {
tv.expandToLevel(firstElement, 1);
}
}
});