ImageIcon?! Hilfe!

Tausendsassa

Aktives Mitglied
Ich arbeite an einem kleinen Bilder Album und nun gibt es ein Problem ich kann nicht herausfinden wie man ein Bild einfügt... Die Methode ImageIcon hilft mir nicht weiter und bei Netbeans über die Properties ein Bild einfügen entspricht nicht dem dahinter gedachten Sinn. Weiters sollten die Bilder aus einem Ordner ausgelesen werden, sodass ich einfach per Knopfdruck (weiß eh noch nicht wie) ausgewählte Bilder zu diesem Ordner hinzufügen können und somit immer alle Bilder angezeigt werden können die man sehen will. Vom Code ist nicht wirklich etwas vorhanden außer bescheidene Versuche ein Icon einzufügen...
Java:
        ImageIcon icon = new ImageIcon("Bild1.jpg");
        ImageLabel = new JLabel(icon);
Das ist meine GUI(Wenns weiter hilft):
20-01-2015 15-42-39.png

Grüße Tausendsassa
 

VfL_Freak

Top Contributor
Moin,

oder sowas:
Java:
ImageIcon myIcon = new ImageIcon( "Bild1.jpg" );
JLabel ImageLabel = new JLabel();
ImageLabel.setIcon( myIcon );
rsp. direkter
Java:
JLabel ImageLabel = new JLabel();
ImageLabel.setIcon( new ImageIcon("Bild1.jpg") );
Gruß Klaus
 
Zuletzt bearbeitet:

Tausendsassa

Aktives Mitglied
Vielen Dank für die antwort doch bei BufferedImage kann ich die Datei(soweit ich das gesehen habe) nicht aus einem Ordner herauslesen und die andere Lösung funktioniert auch nicht da das Label durch den Netbeans-GUI Editor entstanden ist und ich nicht ganz verstehe wie das realisierbar sein soll da das Label ja schon vorhanden ist...

PS Sry für keine Satzteilung ^^

Grüße Tausendsassa
 

Java20134

Bekanntes Mitglied
Doch man kann das Bild aus einem Ordner herauslesen und zwar mit folgendem Quellcode:
Java:
BufferedImage bufferedImage = ImageIO.read(getClass().getClassLoader().getResourceAsStream(path));
Der path besteht dann aus deinem Package Name, wo du im Projekt das Bild eingefügt hast und der Name der Bilddatei mit Typ (png, jpeg, ...).

Wenn du damit ein Problem hast, dann lass mal getClassLoader() raus und lege das Bild in den selben Ordner wie deinen Code. Das Problem wird vllt. erzeugt, da der ClassLoader relativ eigen ist.
 

Foxei

Bekanntes Mitglied
Hallo Tausendsassa,
ich habe mal auf deinem Beispiel basierend ein kleines Tool erstellt welches Bild aus einem Ordner anzeigt.

Die Frame
Eine JFrame mit BorderLayout auf ihr in Region SOUTH ein JPanel mit FlowLayout und den 3 Buttons. Im Center ein JLabel mit BorderLayout und einem JProcessBar in Region South.

Der Ablauf
Nachdem du mit den JFilechooser einen Ordner Ausgewählt hast startet ein SwingWorker in einem 2 Thread im Hintergrund. Dieser guckt ob die Dateien im Ordner Bilddateien sind wenn ja Lädt er sie in eine ArrayList. Wenn er die Liste durch geladen hat Setzt er den JProcessBar unsichtbar und lädt das erster Bild auf das JLabel.

Ich hoffe ich konnte helfen Gruß Simon :)

Code
Java:
package Galerie;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingConstants;
import javax.swing.SwingWorker;

public class Window extends JFrame {

	private static final long serialVersionUID = 3924944672470552800L;
	private File file;
	private List<BufferedImage> list=new ArrayList<BufferedImage>();
	
	private String[] supportetTypes=new String[]{"png","gif","jpg","jpeg"};
	
	private ImageLabel lblImages;
	private JProgressBar bar;
	private int index=0;
	public Window() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		getContentPane().setLayout(new BorderLayout());
		
		JPanel panelButtons = new JPanel();
		getContentPane().add(panelButtons, BorderLayout.SOUTH);
		panelButtons.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
		
		JButton button = new JButton("<");
		panelButtons.add(button);
		button.addActionListener(e->prevImage());
		
		JButton button_1 = new JButton(">");
		panelButtons.add(button_1);
		button_1.addActionListener(e->nextImage());
		
		JButton btnOrdnerAuswhlen = new JButton("Ordner Ausw\u00E4hlen");
		panelButtons.add(btnOrdnerAuswhlen);
		btnOrdnerAuswhlen.addActionListener(e->openFileChooser());
		
		lblImages = new ImageLabel();
		lblImages.setText("Kein Bild geladen.");
		lblImages.setHorizontalAlignment(SwingConstants.CENTER);
		getContentPane().add(lblImages, BorderLayout.CENTER);
		
		lblImages.setLayout(new BorderLayout());
		
		bar=new JProgressBar();
		bar.setMinimum(0);
		lblImages.add(bar,BorderLayout.SOUTH);
	}
	private void nextImage(){
		if(list!=null&&list.size()!=0){
			index=list.size()>index+1?index+1:0;
			lblImages.setImg(list.get(index));
		}
	}
	private void prevImage(){
		if(list!=null&&list.size()!=0){
			index=index>0?index-1:list.size()-1;
			lblImages.setImg(list.get(index));
		}
	}
	private void loadImages(){
		new Worker().execute();
	}
	private boolean isSupportet(String name){
		for(String end:supportetTypes){
			if(name.toLowerCase().endsWith(end.toLowerCase())){
				System.out.println("File "+name+" loaded");
				return true;
			}
		}
		System.out.println("File "+name+" is not an Image");
		return false;
	}
	private void openFileChooser(){
		JFileChooser chooser=new JFileChooser();
		chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		int result=chooser.showOpenDialog(this);
		if(result==JFileChooser.APPROVE_OPTION){
			file=chooser.getSelectedFile();
			System.out.println(file.toString());
			loadImages();
		}
		
	}
	class ImageLabel extends JLabel{

		private static final long serialVersionUID = -2292257639281450634L;
		private BufferedImage img;
		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			if(img!=null){
				Graphics2D g2d=(Graphics2D) g;
				g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
				g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
				g2d.setColor(Color.WHITE);
				g2d.fillRect(0, 0, getWidth(), getHeight());
				g2d.drawImage(img, 0, 0, this.getWidth(), this.getHeight(),this);		
			}
		}
		public BufferedImage getImg() {
			return img;
		}
		public void setImg(BufferedImage img) {
			this.img = img;
			repaint();
		}
	}
	class Worker extends SwingWorker<Integer, String>
	{
	    protected Integer doInBackground() throws Exception
	    {
	    	bar.setVisible(true);
	    	bar.setMaximum(file.listFiles().length);
	    	bar.setValue(0);
	    	index=0;
			list.clear();
			lblImages.setImg(null);
			for(File f:file.listFiles()){	
				
				if(isSupportet(f.getName())){
					try {
						list.add(ImageIO.read(f));
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				bar.setValue(bar.getValue()+1);
			}
	        return 1;
	    }

	    protected void done()
	    {
	    	bar.setVisible(false);
	    	if(list.size()>0){
				lblImages.setImg(list.get(index));
			}
	    }
	}
}
 

Anhänge

  • BildWindow.jpg
    BildWindow.jpg
    78 KB · Aufrufe: 35

Foxei

Bekanntes Mitglied
Habe noch etwas vergessen es gibt ja zwei Klassen :D

Main.java
Java:
package Galerie;

import java.awt.EventQueue;

import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Main {

	public static void main(String[] args){
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					loadStyle();
					Window frame = new Window();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	private static void loadStyle() {
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (ClassNotFoundException | InstantiationException| IllegalAccessException | UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}
	}
}

Window.java
Java:
package Galerie;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingConstants;
import javax.swing.SwingWorker;

public class Window extends JFrame {

	private static final long serialVersionUID = 3924944672470552800L;
	private File file;
	private List<BufferedImage> list=new ArrayList<BufferedImage>();
	
	private String[] supportetTypes=new String[]{"png","gif","jpg","jpeg"};
	
	private ImageLabel lblImages;
	private JProgressBar bar;
	private int index=0;
	public Window() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		getContentPane().setLayout(new BorderLayout());
		
		JPanel panelButtons = new JPanel();
		getContentPane().add(panelButtons, BorderLayout.SOUTH);
		panelButtons.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
		
		JButton button = new JButton("<");
		panelButtons.add(button);
		button.addActionListener(e->prevImage());
		
		JButton button_1 = new JButton(">");
		panelButtons.add(button_1);
		button_1.addActionListener(e->nextImage());
		
		JButton btnOrdnerAuswhlen = new JButton("Ordner Ausw\u00E4hlen");
		panelButtons.add(btnOrdnerAuswhlen);
		btnOrdnerAuswhlen.addActionListener(e->openFileChooser());
		
		lblImages = new ImageLabel();
		lblImages.setText("Kein Bild geladen.");
		lblImages.setHorizontalAlignment(SwingConstants.CENTER);
		getContentPane().add(lblImages, BorderLayout.CENTER);
		
		lblImages.setLayout(new BorderLayout());
		
		bar=new JProgressBar();
		bar.setMinimum(0);
		lblImages.add(bar,BorderLayout.SOUTH);
	}
	private void nextImage(){
		if(list!=null&&list.size()!=0){
			index=list.size()>index+1?index+1:0;
			lblImages.setImg(list.get(index));
		}
	}
	private void prevImage(){
		if(list!=null&&list.size()!=0){
			index=index>0?index-1:list.size()-1;
			lblImages.setImg(list.get(index));
		}
	}
	private void loadImages(){
		new Worker().execute();
	}
	private boolean isSupportet(String name){
		for(String end:supportetTypes){
			if(name.toLowerCase().endsWith(end.toLowerCase())){
				System.out.println("File "+name+" loaded");
				return true;
			}
		}
		System.out.println("File "+name+" is not an Image");
		return false;
	}
	private void openFileChooser(){
		JFileChooser chooser=new JFileChooser();
		chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		int result=chooser.showOpenDialog(this);
		if(result==JFileChooser.APPROVE_OPTION){
			file=chooser.getSelectedFile();
			System.out.println(file.toString());
			loadImages();
		}
		
	}
	class ImageLabel extends JLabel{

		private static final long serialVersionUID = -2292257639281450634L;
		private BufferedImage img;
		@Override
		protected void paintComponent(Graphics g) {
			super.paintComponent(g);
			if(img!=null){
				Graphics2D g2d=(Graphics2D) g;
				g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
				g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
				g2d.setColor(Color.WHITE);
				g2d.fillRect(0, 0, getWidth(), getHeight());
				g2d.drawImage(img, 0, 0, this.getWidth(), this.getHeight(),this);		
			}
		}
		public BufferedImage getImg() {
			return img;
		}
		public void setImg(BufferedImage img) {
			this.img = img;
			repaint();
		}
	}
	class Worker extends SwingWorker<Integer, String>
	{
	    protected Integer doInBackground() throws Exception
	    {
	    	bar.setVisible(true);
	    	bar.setMaximum(file.listFiles().length);
	    	bar.setValue(0);
	    	index=0;
			list.clear();
			lblImages.setImg(null);
			for(File f:file.listFiles()){	
				
				if(isSupportet(f.getName())){
					try {
						list.add(ImageIO.read(f));
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				bar.setValue(bar.getValue()+1);
			}
	        return 1;
	    }

	    protected void done()
	    {
	    	bar.setVisible(false);
	    	if(list.size()>0){
				lblImages.setImg(list.get(index));
			}
	    }
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B ImageIcon auf JPanel austauschen AWT, Swing, JavaFX & SWT 3
C Swing ImageIcon erstellen, skalieren und verwenden AWT, Swing, JavaFX & SWT 3
N imageIcon zeigt kein Bild an AWT, Swing, JavaFX & SWT 5
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
CptK Swing Button: ImageIcon unter den Text AWT, Swing, JavaFX & SWT 4
cool_brivk24 Swing ImageIcon lädt kein Bild AWT, Swing, JavaFX & SWT 12
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
S Bild mit ImageIcon auf GUI verkleinern AWT, Swing, JavaFX & SWT 3
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
L ImageIcon auf JPanel wird nicht angezeigt(keiner Fehlermeldung) AWT, Swing, JavaFX & SWT 11
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
S JLabel mit ImageIcon, komischer Rahmen? AWT, Swing, JavaFX & SWT 2
O ImageIcon lädt nicht AWT, Swing, JavaFX & SWT 2
kaoZ Swing JToolBar, ImageIcon werden teilweise verdeckt AWT, Swing, JavaFX & SWT 0
R ImageIcon - Über Socket AWT, Swing, JavaFX & SWT 1
P ImageIcon lade schlägt fehl AWT, Swing, JavaFX & SWT 5
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
S JLabel zeigt ImageIcon nicht AWT, Swing, JavaFX & SWT 13
B ImageIcon - Probleme mit dem Dateipfad AWT, Swing, JavaFX & SWT 5
C Swing ImageIcon mit Bild aus Temp-Verzeichniss füllen AWT, Swing, JavaFX & SWT 15
P ImageIcon auf Rectangle AWT, Swing, JavaFX & SWT 3
C ImageIcon eines Labels auf einem Panel in neuem Fenster anzeigen AWT, Swing, JavaFX & SWT 2
A Swing ImageIcon hover AWT, Swing, JavaFX & SWT 9
M ImageIcon Bild wird beim verkleinern des Fensters nicht verkleinert AWT, Swing, JavaFX & SWT 3
B Swing ImageIcon Resizing AWT, Swing, JavaFX & SWT 15
S ImageIcon von Label entfernen AWT, Swing, JavaFX & SWT 9
B Warten bis neues ImageIcon zugewiesen ist AWT, Swing, JavaFX & SWT 3
Zettelkasten imageIcon-Rand wegmachen AWT, Swing, JavaFX & SWT 5
S Abspeichern aus einem ImageIcon ins korrekte Format AWT, Swing, JavaFX & SWT 2
J ImageIcon: ZipException bei ungültiger PNG-Datei AWT, Swing, JavaFX & SWT 2
S ImageIcon Grösse anpassen AWT, Swing, JavaFX & SWT 2
J Geladene Grafik in ImageIcon auf Panel fest positionern. AWT, Swing, JavaFX & SWT 8
badfish Swing ImageIcon auf JLabel, Fenster Maximieren verbieten und Icon oben links austauschen? AWT, Swing, JavaFX & SWT 5
B Problem mit imageIO und ImageIcon AWT, Swing, JavaFX & SWT 5
M Swing ImageIcon über JFileChooser einbinden AWT, Swing, JavaFX & SWT 4
C Swing JComboBox - Problem bei Darstellen von ImageIcon AWT, Swing, JavaFX & SWT 4
G ImageIcon viel zu groß AWT, Swing, JavaFX & SWT 2
G IMageIcon Bildgröße ändern AWT, Swing, JavaFX & SWT 7
isowiz Leeres ImageIcon einer bes timmten Größe erzeugen AWT, Swing, JavaFX & SWT 2
W ImageIcon im JLabel mit autosize? AWT, Swing, JavaFX & SWT 3
B ImageIcon JFrame AWT, Swing, JavaFX & SWT 3
M ImageIcon auf AbstractButton links-/rechtbündig AWT, Swing, JavaFX & SWT 2
D jButton mit ImageIcon & MouseListener AWT, Swing, JavaFX & SWT 5
M ImageIcon in JLabel verkleinern AWT, Swing, JavaFX & SWT 8
S n-e-w JLabel(n-e-w ImageIcon(i)) funkt. nicht im JScrollPane AWT, Swing, JavaFX & SWT 2
M Problem, an ImageIcon in JPanels zu kommen. AWT, Swing, JavaFX & SWT 2
J Bildfilterung und Ausgabe in ein ImageIcon AWT, Swing, JavaFX & SWT 2
X ImageIcon für JButton AWT, Swing, JavaFX & SWT 4
X JButton "effect" für ImageIcon AWT, Swing, JavaFX & SWT 6
F ImageIcon -> BufferedImage AWT, Swing, JavaFX & SWT 2
T ImageIcon als Seperator im Jmenu AWT, Swing, JavaFX & SWT 8
G JLabel und ImageIcon AWT, Swing, JavaFX & SWT 16
padde479 ImageIcon laden AWT, Swing, JavaFX & SWT 6
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5
J ImageIcon, Image - 100% CPU Auslastung . AWT, Swing, JavaFX & SWT 3
B imageicon relativer Pfad AWT, Swing, JavaFX & SWT 5
F ImageIcon Größe ändern AWT, Swing, JavaFX & SWT 29
M ImageIcon / .paintIcon() AWT, Swing, JavaFX & SWT 2
M Problem mit ImageIcon in einer JTable AWT, Swing, JavaFX & SWT 2
D JButton einen neuen ImageIcon setzen? AWT, Swing, JavaFX & SWT 2
R resize ImageIcon AWT, Swing, JavaFX & SWT 7
B Problem mit ImageIcon/Swing in Linux AWT, Swing, JavaFX & SWT 6
K ImageIcon fehler ? AWT, Swing, JavaFX & SWT 4
M ImageIcon laden? AWT, Swing, JavaFX & SWT 2
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
JavaBeginner22 Button Hilfe AWT, Swing, JavaFX & SWT 0
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
senol JOptionPane hilfe!!! :(((( AWT, Swing, JavaFX & SWT 32
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
J Swing Hilfe bei Layout AWT, Swing, JavaFX & SWT 2
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
F BorderLayout Hilfe bei Anzeige AWT, Swing, JavaFX & SWT 2
J Hilfe beim tablevies AWT, Swing, JavaFX & SWT 2
T Swing Hilfe - Selbst Informatik Lehrer konnte mir nicht weiter Helfen AWT, Swing, JavaFX & SWT 2
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
A Swing TicTacToe-Bitte um Hilfe AWT, Swing, JavaFX & SWT 32
T Bitte um Hilfe AWT, Swing, JavaFX & SWT 2
T Hilfe bei Code AWT, Swing, JavaFX & SWT 2
S Hilfe bei Java Gui Anfänger AWT, Swing, JavaFX & SWT 5
J Warum geht das nicht? if-else usw..... compilieren geht nicht -- HILFE!!! AWT, Swing, JavaFX & SWT 10
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
T Hilfe was mus ich tun um das fertige JfxFenster zu sehen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
A hilfe für flowlayout AWT, Swing, JavaFX & SWT 6
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
V Swing Brauche Hilfe mit Label AWT, Swing, JavaFX & SWT 3
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
T Swing JTable Zeile mit ausgelesenen Werten mit Hilfe von einem Button hinzufügen AWT, Swing, JavaFX & SWT 1
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
H Swing Hilfe bei GUI AWT, Swing, JavaFX & SWT 4
T HILFE wie lösche ich gezeichnetes per tastendruck AWT, Swing, JavaFX & SWT 1
R Swing JOptionPane Fehlermeldung- bitte um Hilfe! AWT, Swing, JavaFX & SWT 4
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
J GridBagLayout mit Hilfe einer For-Schleife befüllen AWT, Swing, JavaFX & SWT 1
M Hilfe bei Performanceverbesserung AWT, Swing, JavaFX & SWT 34
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben