Eclipse GEF and transparent images
Torsten Uhlmann
—
Wed, 05 Jul 2006
 Photo by Torsten Uhlmann
Well then, the other day I tried to improve the appearance of Net-Herald, our monitoring and controlling application (video here). 
 In the overview you see the result of this adventure. I have set a background image (the clouds) to make the look more attractive. The user can insert any image (texture, a country map, a technical plan) to merge with the shown elements. The image is drawn in the root element of the GEF diagram (condensed view):
protected IFigure createFigure() { 
  Figure f = new FreeformLayer() { 
    @Override protected void paintFigure(Graphics graphics) { 
      Image img = getCastedModel().getImage(); 
      if (img != null) { 
        graphics.drawImage(img, 0, 0); 
      } else { 
        super.paintFigure(graphics); 
      } 
    } 
  }; 
  f.setOpaque(false); 
  f.setBorder(new MarginBorder(3)); 
  f.setLayoutManager(new FreeformLayout()); 
  return f; 
} 
The FreeformLayer does not support background images by itself, but this little adaption does the trick. Now, the next problem was the shown elements- they didn’t like to be drawn transparently. Even the setOpaque() method could not help: 

Now I took my new learned knowledge about adapting the paintFigure() method and thought about drawing a 1 pixel transparent gif as background of my element. I subclassed Panel() which I use as a container for the element’s figures (file attached). Voila! 
 The 1 pixel image is scaled over the whole background of the element and GEF knows how to (not) display it… Moral: Make the user happy :) Class TransparentPanel