# Java Applet bild einfügen



## MScalli (11. Sep 2008)

Hi Leutz.

Ich habe mal angefangen ein bisschen an Applets rum zu probieren.
Leider bin ich gleich auf ein Problem gestossen.

Ich möchte in dieses Applet ein Bild(Banner) einfügen, nur klappt das irgendwie nicht!!
Kann es sein das ich keine feste adresse(also z.B. "c:\\temp\\banner.jpg") nehmen darf??
muss es ne url sein ??
Hab mir noch keinen webserver drauf gemacht da ich erst mal mit den applets bisschen rumprobieren will!!

hier mal mein ausführbares Applet..


```
package masks;

import java.applet.*;
import java.awt.*;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSplitPane;

public class MaskGame extends Applet 
{
	ImageIcon imageIcon;
	
	public void init() {
		setSize(800,600);
	    createGUI();
	}

	private void createGUI() {
		this.setLayout(new BorderLayout());
		
		// Oberes JPanel für Banner
        JPanel top = new JPanel(){
            @Override 
            public void paint( Graphics g )
            {
            	// Variante 1
            	//ImageIcon banner = new ImageIcon("c:\\temp\\banner.jpg");
            	//g.drawImage(banner.getImage(), 0, 0, getSize().width, getSize().height, null);
            	//super.paint(g);
            	
            	// Variante 2
                Image bild = getImage( getDocumentBase(), "c:\\temp\\banner.jpg" );
                g.drawImage( bild, 0, 0, this );
                super.paint(g);

            }
          };
          
        top.setBackground(Color.GRAY);
        top.setPreferredSize(new Dimension(100, 150));
	    this.add(top, BorderLayout.NORTH);
	    
	    // Linkes JPanel für JTree
	    JPanel leftPane = new JPanel();
	    leftPane.setBackground(Color.BLACK);
	    
	    // Rechtes JPanel für die Masken-Panels
	    JPanel rightPane = new JPanel();
	    rightPane.setBackground(Color.LIGHT_GRAY);
	    
	    // JSplitPane das leftPane und rightPane beinhaltet
	    JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,leftPane, rightPane);
	    splitPane.setOneTouchExpandable(true);
	    splitPane.setDividerLocation(150);
	    
	    add(splitPane, BorderLayout.CENTER);

	}
}
```

kann mir bitte wer helfen??
für nen link allgemein über Applet-Programmierung wär ich auch dankbar

gruss
MScalli


----------



## L-ectron-X (11. Sep 2008)

getDocumentBase() liefert einen URL zur HTML-Datei, die dein Applet einbettet. getCodeBase() liefert den URL zum Applet.
Du musst also ausgehend von diesem URL zu deiner Bild-Datei den Rest des Pfad anfügen (nicht neu setzen wie bei dir geschehen).
Wenn also bspw. dein Bild in einem Verzeichnis unterhalb deiner HTML-Datei liegen würde, kann das so aussehen:

```
Image image = getImage(getDocumentBase(), "bilder/bild.jpg");
```


----------



## MScalli (12. Sep 2008)

Ich Programmiere mit Eclipse und hab dieses bild schon so ziemlich überall rein kopiert und ausprobiert.. aber es will nicht!!
eigentlich müsste es ja in dem ordner stehen wo die html erzeugt worden ist.. und dann MÜSSTE es ganz normal mit "banner.jpg" ansprechbar sein.. das geht aber nicht?!?!?!


----------



## L-ectron-X (12. Sep 2008)

Muss ich jetzt ins Blaue raten.

Hast du eine Fehlermeldung in der Java-Console deines Browsers?
Und gibt getDocumentBase() auch wirklich das Verzeichnis zurück, in welchem auch das Bild gespeichert ist?

Ansonsten kannst du es auch mal so versuchen:


```
Image image = getImage(getDocumentBase()+"banner.jpg");
```

oder


```
Image image = getImage(getDocumentBase()+"/banner.jpg");
```

Sollte das nicht funktionieren, guck mir das mal selbst an. Ist schon etwas länger her, dass ich das benutzt habe.
Ich habe das jetzt mal ohne API-Doc aus dem Kopf versucht.


----------



## MScalli (13. Sep 2008)

den konstruktor gibt es leider nicht ..
und wenn ich es anzeige wird mir einiges klar..
mit getDocumentBase bekomme ich den kompletten Pfad.. leider mit der HTML-Datei.. also wenn ich sage

System.out.println(getDocumentBase() +  "/banner.jpg");

bekomme ich die ausgabe..

file:/C:/MyGame/MyGame/bin/masks.MaskGame1221281142906.html/banner.jpg

Oder ist es so das getDocumentBase nur gibt wo die HTML ist, und dann "banner.jpg" im selben Ordner sein muss?? aber so habe ich es?!?! Ich brings echt nicht hin.. gibts denn das


----------



## L-ectron-X (13. Sep 2008)

Ich hab mir das jetzt noch mal angesehen.

getDocumentBase() ist hierfür die falsche Methode, weil sie den absoluten Pfad zum HTML-Dokument zurückgibt.
Du musst hier getCodeBase() benutzen und ausgehend vom zurückgegebenen Pfad dein Bild einsetzen.

Das kann dann so aussehen:

```
Image image = getImage(getCodeBase(), "bild.jpg");
```

getCodeBase() liefert den URL zum Verzeichnis, in dem dein Applet gespeichert ist.
bild.jpg würde  hier also im gleichen Verzeichnis liegen.


----------



## Gast (9. Okt 2008)

Hi MScalli,

du musst auch beachten das du bei den Pfadangaben "masks" hinzufügst, weil die ganzen Befehle alle vom defaultPackage ausgehen. 

Habe das auch stundenlang nicht hinbekommen.

mfg Mang-gon


----------

