SWT - Images wiederbenutzen

Status
Nicht offen für weitere Antworten.

ich_wills_wissen

Bekanntes Mitglied
Hallo mal wieder 🙂

Weiß jemand ob es möglich ist unter SWT Image Objekte mehrfach zu verwenden ?

Hintergrund:

Ich habe eine Tabelle und will dass in einer TableColumn in jeder Zeile immer das selbe
Bild angezeigt wird. Jetzt habe ich im Konstruktor meiner Klasse

Code:
Image meinBild = new Image(blabla...);


stehen. später greife ich in einer Methode in einer Schleife immer wieder auf das Image-Objekt zu und
weise es eine TableItem zu. Jetzt schmeißt Eclipse eine Exception:

org.eclipse.swt.SWTException: Widget is disposed
at org.eclipse.swt.SWT.error(SWT.java:2691)
at blablabla.... blabla....

Das ist jetzt nicht war, oder ? :bahnhof:
Ich muss doch jetzt nicht echt für jedes TableItem ein neues Image-Objekt kreieren, oder ?
(Hab das schon ausprobiert und das geht voll auf die Performance... :x )

Weiß jemand eine gute Lösung für das Problem ?

Danke und Gruß,

ich_wills_wissen :###
 
Hallo!

Als erstes würde ich dir empfehlen, Tabellen grundsätzlich mit dem jface TableViewer zu machen...
ein nützlichen Tutorial gibts hier:

http://www.eclipse.org/articles/Article-Table-viewer/table_viewer.html

Dort ist auch beschrieben, wie ein Image Caching für SWT/jface funktioniert... ist ungefähr
mittig und du musst dir dort den source-code mal runterladen und angucken... :###
Da gibts so Sachen wie ImageRegistry / ImageDescriptor usw. mit denen du
Bilder cachen kannst, damit die net immer neu geladen werden.

Den Horror mit Table und TableItems rumzufrickeln und so weiter mit pure SWT würde ich knicken..
Der TableViewer von jface funktioniert ähnlich der Table von Swing.. mit Datenmodel
und so weiter... halbwegs komfortabel.... :wink:

Ansonsten gibts immer noch die Möglichkeit, die Images static in irgend einer Helperklasse
unterzubringen und diese dann immer bei Bedarf zu holen... Das geht auch mit dem
ImageDescriptor / ImageRegistry so ähnlich... Aber wenn du da dann schon die jface
Abhängigkeit hast -> auf jedenfall den TableViewer nutzen.. 😀
 
Sieht bei mir in der Helper-Klasse etwa so aus:
Code:
public final class Helper 
{

  private static ImageRegistry imageRegistry;

  public static ImageRegistry getImageRegistry ()
  {
    if (imageRegistry == null) {
      imageRegistry = new ImageRegistry();
      imageRegistry.put("baustelle", ladeBild("baustelle.gif"));
      imageRegistry.put("update", ladeBild("update.gif"));
      imageRegistry.put("file", ladeBild("file.gif"));
      // weitere Bilder
    }
    return imageRegistry;
  }

  static ImageDescriptor ladeBild (String name)
  {
    // Bilddatei irgendwie laden
  }

}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben