Bild per Verzeichnis/JFileChooser auf JPanel laden

eksel

Mitglied
Hallo liebes Forum :(,

ich stehe vor einem zähen Problem und würde gerne um eure Hilfe bitten.

Ich habe ein leeres Panel (400x600) im ContentPane eines Frames. Dieses Panel möchte ich mit einem Bild füllen. bzw, möchte ich eine .jpg-Bilddatei einladen, indem ich ein Dateiverzeichnis (über den JFileChooser mit showDialog) aufrufe und dann ein Bild auswähle. Wie gesagt soll das ausgesuchte Bild, welches genauso groß ist wie das Panel (400x600), in das Panel geladen und angezeigt werden.

Nach vieler Recherche komme ich einfach nicht weiter und weiß nicht, wie ich die Sache ganz genau angehen soll. Das einladen mithilfe von BufferedImage und ImageIcon geht ohne Probleme, jedoch muss ich da ja das Bild von vorneherein angeben. Das ist nicht mein Ziel, sondern mein Ziel ist es wirklich über das Dateiverzeichnis Bilder rauszusuchen.

Vielen Dank schonmal für eure Mühe
 

DarXun

Aktives Mitglied
Ich sehe da aktuell keinen großen Unterschied zu dem was du bisher getan hast.
Das Prinzip bleibt doch das gleiche, ebenso die benötigten Variablen.

Bei Programmstart hattest du einen Filepath, jetzt bekommst du den beim Auswählen der Datei durch den JFileChooser.
Dann einfach das bekannte Prozedere durchführen und ggf. noch ein repaint/update?

Kannst ja mal deinen Code posten
 
Zuletzt bearbeitet:

eksel

Mitglied
Hi DarXun, danke für deine Antwort.

Hier ist der Codeauszug, mit dem Anfang des JFileChoosers und dem bisherigen Einladen über ImageIcon.

Java:
public class GUIScreen {

        // Datenfelder
        .....
  	private JPanel contentPane;
 	private static Icon[] bilder = { new ImageIcon("bilder/f.jpg"), new ImageIcon("bilder/m.jpg")}; 

        // Konstruktor
   	public GUIScreen() {
 		  screen();
	}

        // Öffnung des Verzeichnisses um ein Bild zu laden
    public void dateiOeffnen() {
		 JFileChooser bAuswahl = new JFileChooser();
		 int i = bAuswahl.showDialog(null, "Datei öffnen");
	}
 
	public void screen() {
		.....

 		JPanel bFlaeche1 = new JPanel();
 		bFlaeche1.setSize(400, 600);
		bFlaeche1.setLocation(20, 50);

                // Bisherige Vorgehensweise beim Einladen des Bildes
		JLabel bildF = new JLabel(bilder[0]);
		bildF.setBounds(0, 0, 400, 600);
 
                bFlaeche1.add(bildF);
                
                .....

Kann man das irgendwie sinnvoll zusammensetzen? :bahnhof:
 

Admiral Helmut

Aktives Mitglied
ich denke du musst statt:
JLabel bildF = new JLabel(bilder[0]);
die 0 durch eine Variable z.b. i ersetzen.
je nach wahl speicherst du in i dann den Wert des gewünschten Bildes dynamisch.

ich weiss nur nicht was dein FileChooser für methoden bzw. Rückgabewerte hat für die Prüfung
 

eRaaaa

Top Contributor
JLabel hat Methoden um das Icon/Image später noch zu ändern mittels setter....D.h. nachdem du das Bild mit dem chooser ausgewählt hast, setzt du es mit dem setter dem JLabel.

Alternative ohne jegliches Label wäre, das Bild einfach selbst im JPanel zu zeichnen (paintComponent überschreiben).
 

eksel

Mitglied
Danke für die Antworten.

Ich habe jetzt den JFileChooser so erweitert, dass das ausgewählte File gelesen wird. Nur finde ich jetzt keine passende set-Methode, welche das Bild dem JLabel hinzufügt.

Außerdem zeigt er mir bei Ausführung eine Fehlermeldung an, die ich nicht verstehe:

Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)



Hier der Code:

Java:
public void dateiOeffnen() {
	JFileChooser bAuswahl = new JFileChooser();
	int i = bAuswahl.showOpenDialog(null);
		
	if (i == JFileChooser.APPROVE_OPTION) {
		file = bAuswahl.getSelectedFile();
		try {
			img = ImageIO.read(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
 

VfL_Freak

Top Contributor
Moin,

Außerdem zeigt er mir bei Ausführung eine Fehlermeldung an, die ich nicht verstehe:
Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
äh, es tritt eine NullPointerException auf, sprich: irgendwo da, wo Du addImpl aufrufst, wird vermutlich ein/einer der Parameter null sein ...

Hier der Code:
Java:
public void dateiOeffnen() {
	JFileChooser bAuswahl = new JFileChooser();
	int i = bAuswahl.showOpenDialog(null);
		
	if (i == JFileChooser.APPROVE_OPTION) {
		file = bAuswahl.getSelectedFile();
		try {
			img = ImageIO.read(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
Nö :noe:
kein addImpl oder auch nur add ...
Poste doch einfach die angesprochene Main-Methode und zeige dort, wo dort die NPE fliegt!

BTW: wo (und wie) ist denn das img aus Deinem Codeschnipsel deklariert ???:L

Gruß
Klaus
 

eksel

Mitglied
ACH bin ich blöd, die Fehlermeldung hat sich auf ein Überbleibsel vom Code bezogen, den ich vergessen hatte zu löschen, sorry :D

Ja also das mit der Fehlermeldung hat sich erledigt, jedoch wäre ich echt dankbar, wenn ich wüsste wie ich denn jetzt das gelesene Bild auf das Panel packe! Ich habe kein Ahnung, da ich dem JPanel nicht einfach via add() das img geben kann...

Hier jetzt einmal der gesamte Code:

Java:
public class GUIScreen {

  	// Datenfelder
	private JFrame fenster;
	private JPanel bFlaeche1;
    private JLabel bildF;
  	private File file;
 	private BufferedImage img;

	 // Konstruktor der Klasse GUI
 	public GUIScreen() {
 		screen();
 	 }

 	 // Methode zur Öffnung des Verzeichnisses um ein Bild zu laden

	 public void dateiOeffnen() {
		JFileChooser bAuswahl = new JFileChooser();
		int i = bAuswahl.showOpenDialog(null);
			
 		file = bAuswahl.getSelectedFile();
  		try {
 			img = ImageIO.read(file);
 		 } catch (IOException e) {
 			// TODO Auto-generated catch block
  			e.printStackTrace();
 		}
 	 }

	public void screen() {
		  ...

  		bFlaeche1 = new JPanel();
		bFlaeche1.setSize(400, 600);
 		bFlaeche1.setBackground(Color.GREEN);
 		bFlaeche1.setBorder(new EtchedBorder());
		
		JButton button1 = new JButton("Bild 1 Laden");
		button1.setSize(150, 30);
		button1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dateiOeffnen();
 				// "Aktion eintragen();"
			}
		});

                ...
	}

	public static void main(String[] args) {
		new GUIScreen();
	}
}
 

VfL_Freak

Top Contributor
Moin,

Ja also das mit der Fehlermeldung hat sich erledigt, jedoch wäre ich echt dankbar, wenn ich wüsste wie ich denn jetzt das gelesene Bild auf das Panel packe! Ich habe kein Ahnung, da ich dem JPanel nicht einfach via add() das img geben kann...

Doch, eigentlich schon :)
Versuch es doch einfach mal so :
Java:
String yourPic = "c:\\bilder\\idle.jpg";
// .....
yourPanel.loadImage( yourPic );

Gruß
Klaus
 

eksel

Mitglied
hmm, das klappt irgendwie nicht, ich kann loadimage(BufferedImage) nicht mit panel(JPanel) benutzen, da meckert er: The method loadimage(BufferedImage) is undefined for the type JPanel. :bahnhof:
 

VfL_Freak

Top Contributor
Moin,

ach - sorry ... ja, da hatte ich in einer eigenen Panelklasse, die von JPanel abgeleitet ist, was überschrieben.

Hier mal diese Funktion (leicht verkürzt) als Anregung für Dich :
Java:
private boolean loadImageFromFile( String strImage ) 
	{
		boolean bErg = false;
		strPicURL = "";

		BufferedImage myImage = null;
		File idlePic = null;
		try 
		{
			idlePic = new File( strImage );
			myImage = ImageIO.read( idlePic );
			idlePic = null;
		} 
		catch( IOException ex ) 
		{
			myImage = null;
			idlePic = null;
			bErg = false;
			ex.printStackTrace();
		}

		if( myImage != null ) 
		{
			setImage( myImage );
			resizePicPanel();
			bErg = true;
		} 
		
		return bErg;
	} // loadImageFromFile

Gruß
Klaus
 

eksel

Mitglied
Danke für den Code, habe mich da durchgearbeitet und einiges ausprobiert, jedoch wird mir nicht wirklich ganz klar, wie ich das verstehen soll mit dem
Java:
 setImage( myImage );
. Hier überträgst du ja das geladene Bild, ist das richtig? Was genau ist denn setImage?

Danke für dein Mühe!
 

paul59539

Mitglied
Below code should resolve your problem:

HTML:
jmi.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
        JFileChooser fc = new JFileChooser();
        int result = fc.showOpenDialog(null);
        if (result == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();
            String sname = file.getAbsolutePath(); //THIS WAS THE PROBLEM
            image = new JLabel("", new ImageIcon(sname), JLabel.CENTER);
            jpanel.add(image, BorderLayout.CENTER);
            jpanel.revalidate(); //ADD THIS AS WELL
            jpanel.repaint();  //ADD THIS AS WELL
        }
    }
});
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
I Kamera anschließen / Bild machen / Live View / Externe Blitz Java Basics - Anfänger-Themen 19
I Innerhalb einem Bild ein Teil austauschen Java Basics - Anfänger-Themen 26
I Datei (Bild) Drucken und wie Druckeinstellung speichern? Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
R UML-Bild (Erkennung ob static o. nicht) Java Basics - Anfänger-Themen 18
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
krgewb Bild itextpdf Java Basics - Anfänger-Themen 2
C Bild in executable JAR File mitgeben Java Basics - Anfänger-Themen 5
VPChief Bild in JEditorPane Java Basics - Anfänger-Themen 9
B Warum bekomme ich kein Bild. Java Basics - Anfänger-Themen 10
S Bild einfügen // NEU Java Basics - Anfänger-Themen 12
N Bild drehen Java Basics - Anfänger-Themen 3
S Ein Bild mit dynamischer Quelle neuzeichnen Java Basics - Anfänger-Themen 12
N GLOOP Bild nicht ansichtbar Java Basics - Anfänger-Themen 5
M Bild in JFrame Java Basics - Anfänger-Themen 1
B Signatur erstellen - Bild ist nur weiß Java Basics - Anfänger-Themen 0
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 17
CptK Interface Bild rotieren Java Basics - Anfänger-Themen 1
Anica Processing Animation Bild-Position ändern Java Basics - Anfänger-Themen 9
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
CptK Interface Curser durch Bild ersetzen & MouseListner Java Basics - Anfänger-Themen 2
M jTextPane Bild anzeigen Java Basics - Anfänger-Themen 6
CptK Bild beim betätigen eines JButtons Java Basics - Anfänger-Themen 6
S Bild über JButton legen Java Basics - Anfänger-Themen 3
B Bild mit Schrift befüllen / Anpassung bei Wortlänge Java Basics - Anfänger-Themen 2
D Google maps bild mit marker versehen Java Basics - Anfänger-Themen 12
D ImageView mit einfarbigem Bild fuellen Java Basics - Anfänger-Themen 3
it_is_all Bild-Pfad wird gefunden, nicht aber Textdatei-Pfad Java Basics - Anfänger-Themen 8
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
J Bild in Button einsetzen Java Basics - Anfänger-Themen 6
S button kommt durch bild Java Basics - Anfänger-Themen 13
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
B Greenscreen (grüner Hintergrund ersetzen mit Bild) Java Basics - Anfänger-Themen 49
K Interface Kein Bild im .jar-File Java Basics - Anfänger-Themen 15
S Bild in Jar-File mit ImageIO Java Basics - Anfänger-Themen 50
S Bild einfügen Java Basics - Anfänger-Themen 16
binop Bild anzeigen lassen Java Basics - Anfänger-Themen 2
D Bild zu Text Java Basics - Anfänger-Themen 4
I HTML Code in Bild (transparent) konvertieren Java Basics - Anfänger-Themen 0
I Watermark erstellen mit HTML in Bild? Java Basics - Anfänger-Themen 7
D Classpath Bild kann in .jar nicht geladen werden Java Basics - Anfänger-Themen 2
Anfänger2011 Bild programmieren?! Java Basics - Anfänger-Themen 3
8 Eigenes Bild in email einfügen Java Basics - Anfänger-Themen 1
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
S Bild in JOptionPane Java Basics - Anfänger-Themen 1
C Abfrage nach einem Bild im Array Java Basics - Anfänger-Themen 9
J Umgebungsvariable Programmfenster zeigt kein Bild an Java Basics - Anfänger-Themen 1
J Bild loopen Java Basics - Anfänger-Themen 6
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
S Bild bei Kontakt ändern Java Basics - Anfänger-Themen 2
C Erste Schritte Bild holen und speichern Java Basics - Anfänger-Themen 1
D Bild in Frame einfügen Java Basics - Anfänger-Themen 11
D Bild im Applet anzeigen Java Basics - Anfänger-Themen 3
F Bild in ein Runnable Jar File packen (eclipse) Java Basics - Anfänger-Themen 2
M Java-Applet: Bild einbinden (getImage) Java Basics - Anfänger-Themen 0
J Ganzes Bild Java Basics - Anfänger-Themen 4
T GUI anstatt Bild schwarzes Rechteck gespeichert Java Basics - Anfänger-Themen 0
A Bild verschwindet! Wieso?? Java Basics - Anfänger-Themen 2
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
Y Nach Bild-Upload wird Bild nicht angezeigt Java Basics - Anfänger-Themen 1
M Button mit Bild und Text Java Basics - Anfänger-Themen 2
M JSP-Einfaches Bild anzeigen Java Basics - Anfänger-Themen 4
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
Sogomn Bild will sich nicht skalieren lassen Java Basics - Anfänger-Themen 1
P Ein Bild für GUI (Java-Editor) Java Basics - Anfänger-Themen 4
D Bild für ein paar Sekunden einblenden und wieder ausblenden Java Basics - Anfänger-Themen 1
S Bild auf eine Position rotieren?! Java Basics - Anfänger-Themen 4
P Bild bearbeiten Java Basics - Anfänger-Themen 9
Z Datenmatrix in Bild verwandeln Java Basics - Anfänger-Themen 4
C Bild verschwinden lassen Java Basics - Anfänger-Themen 7
S Bild Icon aus ID3Tag auslesen Java Basics - Anfänger-Themen 4
E Bild vom FileChooser aus via ImageIcon in DB schreiben Java Basics - Anfänger-Themen 16
D Bild zum Panel hinzufügen Java Basics - Anfänger-Themen 8
C Greenfoot: Bei Tastendruck und best. Wert Bild ändern Java Basics - Anfänger-Themen 2
O Auflösung einer Bild-Datei bekommen ohne sie herunterzuladen?? Java Basics - Anfänger-Themen 7
L Bild-Datein "zuschneiden" Java Basics - Anfänger-Themen 11
O DeviantArt-Bild Konverter: Fehler.. Java Basics - Anfänger-Themen 16
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
M Bild einbinden Java Basics - Anfänger-Themen 7
2 Bild auf JApplet zeichnen Java Basics - Anfänger-Themen 18
T Bild laden Java Basics - Anfänger-Themen 7
R Bild in GUI Java Basics - Anfänger-Themen 11
D Eclipse Juno zeigt Bild nicht bei Run Java Basics - Anfänger-Themen 3
Kenan89 Bild mit jar öffnen Java Basics - Anfänger-Themen 4
S Problem bei Bewegung von einem Bild! Java Basics - Anfänger-Themen 2
J Bild mit transparenter Farbe Java Basics - Anfänger-Themen 10
N Erste Schritte Applet zeichnet Bild nicht Java Basics - Anfänger-Themen 10
J Bild auf JLabel wird nicht angezeigt Java Basics - Anfänger-Themen 11
J Bild einfügen Java Basics - Anfänger-Themen 3
T ASCII Art von Bild erstellen. Java Basics - Anfänger-Themen 32
E Bild OS-unabhängig einbinden mit URL Java Basics - Anfänger-Themen 4
A BufferedImage in Android einbinden - Bild spiegeln -wie? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben