# Bild in JPanel einfügen funktioniert nicht



## podman (11. Mrz 2007)

Folgendes habe ich vor: In meiner Programm gibt es eine About-Button, in dem ich sage, was das Programm macht, wer ich bin, warum ich das programmiert habe usw. Um den Text ein bisschen aufzulockern, wollte ich ein Bild einfügen. Das Bild liegt im gleichen Package wie die Gui, damit ich schnell darauf zugreifen kann. Folgendes habe ich mir dann gedacht:

*Icon icon = new ImageIcon("Bild.jpg" );
JPanel about = new JPanel(new GridLayout(3,1));*

Nun will ich mit einer einfach Einfügeoperation das Bild in das JPanel about einfügen, doch bin ich in der API mal wieder nicht fündig geworden, ein addImageIcon gibts ja anscheinend nicht. Nun schlug mir mein Tutor folgende Lösung vor:

*JFrame f = new JFrame("Bild");
ImageIcon bild = new ImageIcon("Bild.jpg");
JLabel lab = new JLabel("Mein Testbild", bild, JLabel.CENTER);
f.getContentPane().add(lab);
f.setVisible(true);*

Doch auch das funktioniert nicht. Bin echt am Verzweifeln, wie füge ich das Bild "Bild.jpg" schnell und einfach ein?

Danke im Vorraus!
Sebastian


----------



## Chris_1980 (11. Mrz 2007)

was dein Tutor da vorgeschlagen hat funktioniert doch. Ah ich seh grad du schreibst was von package.
Dann versuch das mal in dem du das Bild so lädst (Das Bild muß in dem Fall im selben Ordner wie die Klasse liegen):

ImageIcon bild = new ImageIcon(this.getClass().getResource("Bild.jpg"));


----------



## podman (11. Mrz 2007)

Vermutlich hab ich irgendwo einen Denkfehler!

public class About {

	public JPanel getAboutPanel(){

*//Erzeugen eines ImageIcons für die Bilddatei
		ImageIcon icon = new ImageIcon(this.getClass().getResource("Bild.jpg"));
		//Hinzufügen der Bilddatei zum Panel
		JLabel lab = new JLabel("Hier sollte das Bild stehen", icon, JLabel.CENTER);*

		// Zeichnen eines Rahmen mit Beschriftung um das Textfield
		Border developementFrame = BorderFactory.
		createTitledBorder("Heartbeat Controle - The Client-Server-Software");

		// Erzeugung des Inhalts des umrahmten Textfields
		JTextArea developement = new JTextArea("Inahlt")
                                developement.setBorder(developementFrame);

                                // Zeichnen eines Rahmen mit Beschriftung um das Textfield
		Border informationFrame = BorderFactory.createEmptyBorder();	

                                // Erzeugung des Inhalts des umrahmten Textfields
	                JTextArea information = new JTextArea("Information");                                    
                                information.setBorder(informationFrame);

		JPanel about = new JPanel(new GridLayout(3,1));
*about.add(lab);*
		about.add(developement);
		about.add(information);
		return about;
	}

}

Die Methode getAboutPanel rufe ich dann in der Klasse MainGui auf, die den Frame und die Sichtbarkeit definiert.
Irgendwo im fetten Bereich steckt ja wohl ein Fehler!


----------



## Chris_1980 (11. Mrz 2007)

Wird der Rest des AboutPanels denn richtig angezeigt?

krigst du ne Fehlermeldung, wenn ja welche?

PS: Die Code-Tags machen das Codelesen wesentlich angenehmer.


----------



## Marco13 (11. Mrz 2007)

Wenn man das hier compiliert und startet, wird das Bild angezeigt. Funktioniert das bei dir?

```
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;


public class About {

public static void main(String args[])
{
    JFrame f = new JFrame();
    f.getContentPane().add(new About().getAboutPanel());
    f.setSize(300,300);
    f.setVisible(true);
}

public JPanel getAboutPanel(){

//Erzeugen eines ImageIcons für die Bilddatei
ImageIcon icon = new ImageIcon(this.getClass().getResource("Bild.jpg"));
//Hinzufügen der Bilddatei zum Panel
JLabel lab = new JLabel("Hier sollte das Bild stehen", icon, JLabel.CENTER);

// Zeichnen eines Rahmen mit Beschriftung um das Textfield
Border developementFrame = BorderFactory.
createTitledBorder("Heartbeat Controle - The Client-Server-Software");

// Erzeugung des Inhalts des umrahmten Textfields
JTextArea developement = new JTextArea("Inahlt");
developement.setBorder(developementFrame);

// Zeichnen eines Rahmen mit Beschriftung um das Textfield
Border informationFrame = BorderFactory.createEmptyBorder();

// Erzeugung des Inhalts des umrahmten Textfields
JTextArea information = new JTextArea("Information");
information.setBorder(informationFrame);

JPanel about = new JPanel(new GridLayout(3,1));
about.add(lab);
about.add(developement);
about.add(information);
return about;
}

}
```


----------



## podman (12. Mrz 2007)

Nein, das klaptt leider nicht! Da steht dann auch "Hier sollte das Bild stehen" anstatt vom Bild.


----------



## WieselAc (12. Mrz 2007)

Da liegt dein Bild garantiert im falschen Verzeichnis. Es muss in Root-Verzeichnis deiner Anwendung liegen. 

Wenn dir das nichts sagt, dann kopier es einfach überall hin wo du vermutest, dass dieses Verzeichnis seinkönnte und hoff, dass dann was angezeigt wird. 

Wenn das der Fall ist, eine Kopie nach der Anderen löschen, bis nur noch eins über ist, oder du machst 
System.out.println(new File("").getAbsolutePath()); , dan weißt du auch wo dein "Root" Verezichnis ist.


----------



## Marco13 (12. Mrz 2007)

Im Zweifelsfall: Kopier' das Bild mal testweise (!) da hin, wo auch die *About.class* liegt.


----------

