Christopher: JTree - Backgroundimage

Hallo,

ich hatte letztens schonmal eine Frage bezueglich Hintergrundbilder
unter Java; kann den Thread allerdings gerade nicht im Archiv finden.

Nun geht es um einen JTree, den ich gerne mit einem transparenten
Hintergrundbild versehen moechte.

Mein bisherigre Ansatz ist:

  
trMessages = new JTree()  
{  
  ImageIcon image =   ResourceHelper.GetImageIcon("materials/imgs/bgsymbol.gif");  
   public void paint( Graphics g )  
   {  
    Dimension d = getSize();  
    for( int x = 0; x < d.width; x += image.getIconWidth() )  
     for( int y = 0; y < d.height; y += image.getIconHeight() )  
      g.drawImage( image.getImage(), x, y, null, null );  
    super.paint(g);  
   }  
  };  

In dem Code oben erscheint das Bild ueberhaupt nicht. Verschiebe
ich jedoch die Zeile super..() an den Anfang der Methode so
wird es glueckligerweise angezeigt. JEdoch ueberlappt es dann
den anzuzeigenden Inhalt, so dass er sich dann "hinter" dem
Hintergrundbild versteckt (teilweise, da transparent).

Wie kann ich dieses Problem loesen? Kann mir von euch evtl.
einer dabei weiterhelfen?

Besten Dank schonmal im Voraus
Christopher

  1. Hallo,

    In dem Code oben erscheint das Bild ueberhaupt nicht. Verschiebe
    ich jedoch die Zeile super..() an den Anfang der Methode so
    wird es glueckligerweise angezeigt. JEdoch ueberlappt es dann
    den anzuzeigenden Inhalt, so dass er sich dann "hinter" dem
    Hintergrundbild versteckt (teilweise, da transparent).

    Wie kann ich dieses Problem loesen? Kann mir von euch evtl.
    einer dabei weiterhelfen?

    Mein Lösungsvorschlag:
    Lege das Hintergrundbild in ein JComponent, welches keine anderen Aufgaben hat, als Container für den JTree zu sein. Ein JPanel würde sich anbieten. Dann sorge dafür, dass der JTree einen transparenten Hintergrund hat. Den hat er, je nach UI-Look&Feel, nicht immer. Für den gesamten JTree hilft:

      
    tree.setOpaque(false);  
    
    

    Für die TreeCells hilft das nicht. Google-Recherchen zeigten mir, dass es wohl problematisch ist, die TreeCells, also die Beschriftungen der Zweige, transparent zu bekommen. Unter Windows habe ich es schließlich mit:

      
    DefaultTreeCellRenderer dtcr = new DefaultTreeCellRenderer() {  
      public Color getBackgroundNonSelectionColor() {  
         return new Color(0,0,0,0);  
      }  
    };  
    tree.setCellRenderer(dtcr);  
    
    

    geschafft.

    viele Grüße

    Axel

    1. Hallo Axel,

      besten Dank fuer deine Bemuehungen!
      Bin gerade zwar auf Arbeit aber werde es heute
      Abend mal ausprobieren.

      Freundliche Gruesse
      Christopher

      1. Hallo Axel,

        super! Besten Dank. Hat wunderbar geklappt ;-)

        Gruesse
        Christopher