Swing Bilder zeichnen

granini

Bekanntes Mitglied
Hallo zusammen,

ich sitze nun schon was länger an dem Problem, dass ich keine Bilder auf dem JFrame gezeichnet bekommen. Vielleicht kann jemand mal über den dafür relevanten Code schauen, und mir einen Tipp geben, woran das liegt!?

Java:
public class Frame extends JFrame{

             JFrame new = new JFrame();
             BufferedImage[] array = new BufferedImage[];

             public void init{
                 .....
                JMenuItem menuItem = new JMenuItem("Bild");
		menuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				...
				leseBild();
				repaint();
			}
		});

            
            }

           public void leseBild(){
                      //das array vom Typ BufferedImage wird befüllt 
          }

          public void paintComponent (Graphics g){	
	   	for (int i = 0; i < array.length; i++) {
			BufferedImage image = new BufferedImage(125,125,i);
			g.drawImage(image,0,0,this);
		}	
	}
}

Danke!
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Uha :)

Alsooo

a) Zeile 1: Bennene deine Klasse lieber um, es gibt nämlich schon eine Klasse namens Frame im JDK!
b) Zeile 3: Die Zeile macht meiner Meinung 1. keinen Sinn, da du ja selbst schon ein JFrame bist, indem du JFrame erweiterst, und 2. Variablennamen dürfen nicht so heißen wie Schlüsselwörter, in dme Falle also "new" :)
c) Zeile 4: Du musst schon eine Größe angeben für das Array :)
d) Zeile 6: Da fehlen die Klammern init() ...
......

Okay, kommen wir zum Zeichnen *g*
e) Ein JFrame hat keine paintComponent, also kannst du diese natürlich auch nicht überschreiben ;D
Erstelle ein JPanel und überschreibe dort die paintComponent und füge dann das Panel deinem Frame hinzu!
Beispiele solltest du hier im Forum genug bekommen, ansonsten kannst du dir auch mal das hier anschauen.
 

André Uhres

Top Contributor
Versuch's mal so:
Java:
...
    private JPanel picturePanel;
...
        menuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                leseBild();
                picturePanel.repaint();
            }
        });
...
        picturePanel = new JPanel() {
            @Override
            public void paintComponent(Graphics g) {
                for (int i = 0; i < array.length; i++) {
                    g.drawImage(array[i], 0, 0, this);
                }
            }
        };
        frameAlbum.add(picturePanel);
...
Wobei man allerdings für jedes Bild aus dem Array noch die Koordinaten anpassen muss. Aber das kriegst du sicher hin :) .
 

granini

Bekanntes Mitglied
Danke für die beiden Tipps.. ich habe nun das letztere Model gewählt. Nur bekomme ich beim Aufruf von picturePanel.repaint(); eine NullPointerException? Was ich gerade nicht ganz verstehe...
 

granini

Bekanntes Mitglied
In eine Methode leseBilder....

Java:
public class WindowFrame extends JFrame{
 
             JFrame frame = new JFrame();
             BufferedImage[] array = new BufferedImage[];
 
             public void init{
                 .....
                JMenuItem menuItem = new JMenuItem("Bild");
        menuItem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                ...
                leseBild();
            }
        });
 
           public void leseBild(){
                      //das array vom Typ BufferedImage wird befüllt 
                     picturePanel.repaint();
		picturePanel = new JPanel() {
			@Override
			public void paintComponent(Graphics g){	
				System.out.println("test");
				for (int i = 0; i < array.length; i++) {
					BufferedImage image = new BufferedImage(125,125,i);
					g.drawImage(image,0,0,this);
				}
			}
		};
                frame.add(picturesPanel);
          }
}
 

eRaaaa

Top Contributor
:)

Du erstellst ja erst in Zeile 19 das JPanel, demzufolge ist in Zeile 18 picturePanel noch [c]null[/c] :)
Zeile 19 - 28 musst du z.b. in die init Methode(wo immernoch die Klammern fehlen ;D ) / Konstruktor oder wie auch immer verlagern ...es macht ja auch keinen Sinn ständig neue JPanels zu erstellen :)
 

granini

Bekanntes Mitglied
Ja, aber die Methode init() oder auch ein Konstruktor werden für paintComponent viel zu früh aufgerufen, so dass das Array noch gar nicht befüllt ist. Dann fährt das ganze viel früher an die Wand. Gibt es da keine Möglichkeiten aus der Methode leseBild() zum Laufen zu kriegen?
 

eRaaaa

Top Contributor
Also ich glaube du verstehst da was falsch..Das ist eine anonyme innere Klasse, paintComponent wird an der Stelle dann nicht aufgerufen, sondern "definiert"..aufgerufen wird das ganz automatisch sobald das Panel sichtbar wird (oder eben durch repaint aufgefordert wird), und an die Wand gefahren wird da auch nichts, es wird halt zu Beginn nur nichts gezeichnet. In leseBild() musst du dann einfach nur das Bild laden, ins Array ablegen und kannst dann repaint aufrufen!
 

granini

Bekanntes Mitglied
Das habe ich nun auch schon ausprobiert. Aber so bald die Zeilen 19 - 28 in der methode init() sind, bricht die for - Schelife Zeile 23 ab mit einer NullpointerException ,weil das array leer ist...


Ok, das kann man natürlich mit eine if-Abfrage steuern. Nun wird das Array gefüllt. Aber ein picturePanel.repaint() endet weiterhin in einer NullPointerException.
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
....dann ist picturePanel immernoch NULL...ohje
Also ich glaube so kommen wir nicht weiter ...
Zeig doch mal deine komplette Klasse! Oder du machst mal ein kurzes kompilierbares Beispiel!


Java:
   BufferedImage[] array = new BufferedImage[];

wie oben schon angemerkt, geht so etwas gar nicht und da sind auch noch andere Fehler in deinem Code..man kann gar nicht wirklich nachvollziehen wie dein Code "in echt" aussieht !
 
Zuletzt bearbeitet:

granini

Bekanntes Mitglied
Main
Java:
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		WindowFrame newWindow = new WindowFrame();
		newWindow.init();
	}
}
WindowFrame
Java:
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.*;



public class WindowFrame extends JFrame {
	
	
	JFrame frame = new JFrame("Testframe");
	
	
	JPanel picturePanel;
	public BufferedImage[] array ;
	
	public void init(){	
		JMenuBar menuBar;
		JMenu menu;
		menuBar = new JMenuBar();
		menu = new JMenu("Datei");
		menuBar.add(menu);		
		JMenuItem menuItem = new JMenuItem("Add");
		menuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Testklasse testklasse = new Testklasse();
				testklasse.addBild();
			}

			
		});
		menu.add(menuItem);
		
		
		picturePanel = new JPanel() {
			@Override
			public void paintComponent(Graphics g){	
				System.out.println("test");
				if (array != null){
					for (int i = 0; i < array.length; i++) {
						BufferedImage image = new BufferedImage(125,125,i);
						g.drawImage(image,0,0,this);
					}
				}
				
			}
		};
		frame.add(picturePanel);
		frame.setJMenuBar(menuBar);
		frame.setSize(860,640);
		frame.setVisible(true);
	}
	
	public void einlesenBild(File[] bild){
		System.out.println(bild.toString());
		array = new BufferedImage[bild.length];
		for (int i = 0; i < array.length; i++) {
            	try {
					array[i] = ImageIO.read(bild[i]);
					
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
        }
		picturePanel.repaint();	
	}
}

Testklasse
Java:
import java.io.File;
import javax.swing.JFileChooser;


public class Testklasse {
	WindowFrame frame = new WindowFrame();
	JFileChooser fileChooser = new JFileChooser();
	File[] bild;
	
	public void addBild(){
		fileChooser.setMultiSelectionEnabled(true);
		fileChooser.showOpenDialog( null );
	    bild = fileChooser.getSelectedFiles();   
       if (bild != null) {
	    	 frame.einlesenBild(bild);
	    }
	}
}
 

eRaaaa

Top Contributor
Okay, du darfst natürlich in Testklasse keine neue Instanz von WindowFrame erstellen (da du dort auch nicht init() aufrufst ist das Panel dann natürlich auch null :D ). Also entweder du übergibst der Testklasse eine Referenz oder machst die Methode vllt statisch und versiehst mit einem Rückgabewert oder so..

mal schnell angepasst, so dass überhaupt erstmal gezeichnet wird: (refactoring überlasse ich dir :D )
Java:
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.*;

public class WindowFrame extends JFrame {

	JPanel picturePanel;
	public BufferedImage[] array;

	public void init() {
		JMenuBar menuBar;
		JMenu menu;
		menuBar = new JMenuBar();
		menu = new JMenu("Datei");
		menuBar.add(menu);
		JMenuItem menuItem = new JMenuItem("Add");
		menuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new Testklasse(WindowFrame.this).addBild();
			}
		});
		menu.add(menuItem);

		picturePanel = new JPanel() {
			@Override
			public void paintComponent(Graphics g) {
				System.out.println("test");
				if (array != null) {
					for (int i = 0; i < array.length; i++) {
						g.drawImage(array[i], 0, 0, this); // TODO: position
															// anpassen!
					}
				}
			}
		};
		add(picturePanel);
		setJMenuBar(menuBar);
		setSize(860, 640);
		setVisible(true);
	}

	public void einlesenBild(File[] bild) {
		System.out.println(bild.toString());
		array = new BufferedImage[bild.length];
		for (int i = 0; i < array.length; i++) {
			try {
				array[i] = ImageIO.read(bild[i]);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		picturePanel.repaint();
	}
}

Java:
import java.io.File;
import javax.swing.JFileChooser;

public class Testklasse {
	JFileChooser fileChooser = new JFileChooser();
	File[] bild;

	WindowFrame frame;

	public Testklasse(WindowFrame frame) {
		this.frame = frame;
	}

	public void addBild() {
		fileChooser.setMultiSelectionEnabled(true);
		fileChooser.showOpenDialog(null);
		bild = fileChooser.getSelectedFiles();
		if (bild != null) {
			frame.einlesenBild(bild);
		}
	}
}
 
Zuletzt bearbeitet:

granini

Bekanntes Mitglied
Oha, Danke schon einmal..

Wenn ich jetzt in der Testklasse die Methoden getHeigth und getWidth habe, wo verändere ich die Größen der Bilder am besten?
 

eRaaaa

Top Contributor
Oha, Danke schon einmal..

Wenn ich jetzt in der Testklasse die Methoden getHeigth und getWidth habe, wo verändere ich die Größen der Bilder am besten?

Jetzt kann ich dir nicht mehr folgen sorry :D
Im Moment existiert in Testklasse ja noch kein Bild...dort gibt es im Moment ja nur "Dateipfade" ...die konkreten Bilder erstellst du ja erst in
Code:
einlesenBild
.
Wenn deine Frage jetzt darauf hin abzielt, dass du die Bilder skalieren möchtest, würde ich das direkt in der paintComponent und drawImage machen(die Methode ist überladen, man kann da also auch Größen angeben!)
 

granini

Bekanntes Mitglied
Gut, dann brauche ich wohl einen anderen Typ. Aber in paintComponent passiert nichts bzw das Bild bleibt gleich groß...
Java:
picturePanel = new JPanel() {
			@Override
			public void paintComponent(Graphics g){	
				System.out.println("test");
				if (array != null){
					for (int i = 0; i < array.length; i++) {
						Image img = array[i];
					
						img.getScaledInstance(20,20,20);
						int posX = 0;
						int posY = 0;
						g.drawImage(img,posX,posY,this);
						posX = posX + 10;
						posY = posY + 10;
					}
				}
			}
		};
 

eRaaaa

Top Contributor
Grrr :)
Lass mal das getScaledInstance weg (hints = 20 ist eh etwas merkwürdig und deine skalierte Version verpufft eh im Nirvana *g* ) und benutze nur drawImage..wie ich in meinem letzten Post schon sagte/anmerkte, ist die Methode überladen, du könntest z.B. diese benutzen !
 

granini

Bekanntes Mitglied
und nochmal Danke... Es sieht immer besser aus..
Aber leider hacken noch drei Dinge bis ich denke mit dem Konstrukt kann ich weiter testen
1. g.drawImage(array,posX,posY,100,100,this); Funktioniert.
public int getHöhe(){return 100} public int getBreite(){return 100} definiert i nder Klasse WindowFrame udn ein entsprechendes g.drawImage(array,posX,posY,getHöhe(),getBreite(),this); skaliert das Bild nicht auf die gewünschte Größe.

2. Es werden bei einer selektion von mehreren bildern, nur das erste selektierte Bild gezeichnet und nciht alle mit entsprechender Positionsänderung.

3. Nach dem das erste Bild gezeichnet wurde bleibt der Dialog des JFileChooser im WindowFrame haften bis ich einmal das Frame etwas skaliert habe. Auch die Auswahl der Bilder bis zur Darstellung erscheint etwas langsam..

Vielleicht hast du, oder jemand anders ein paar Tipps zu den Punkten,,
 

eRaaaa

Top Contributor
ein entsprechendes g.drawImage(array,posX,posY,getHöhe(),getBreite(),this); skaliert das Bild nicht auf die gewünschte Größe.


du verwechselst Höhe und Breite :) Erst width, dann height! Du solltest auch Umlaute vermeiden, also lieber getHoehe() wenns schon denglish ist :D

2. Es werden bei einer selektion von mehreren bildern, nur das erste selektierte Bild gezeichnet und nciht alle mit entsprechender Positionsänderung.

3. Nach dem das erste Bild gezeichnet wurde bleibt der Dialog des JFileChooser im WindowFrame haften bis ich einmal das Frame etwas skaliert habe. Auch die Auswahl der Bilder bis zur Darstellung erscheint etwas langsam..

Ist jetzt wieder schlecht nachvollziehbar ohne aktuellen Stand des Codes :) Klar, wenn du ein 20 Pixel breites Bild hast, und x aber immer nur um 10 Pixel verschiebst, sollte es klar sein, dass die nächstne Bilder nicht mehr ganz,. oder gar nicht zu sehen sind ...
3. könnte damit zu tun haben, dass du das Laden der Bilder auf dem EDT ausführst..also direkt aus dem Listener heraus...
Du kannst dir ja vllt mal Grundlagen/Beispiele anschauen, es macht für dich ja auch kein Sinn/ hat keinen Lerneffekt, wenn wir für dich alle fünf Minuten deinen Code "refactorn"(gibts das Wort? ^^) /umgestalten!
 

granini

Bekanntes Mitglied
Ok, da hast du natürlich recht. Ich habe das ganze mal ein wenig umgekrempelt, und gefühlt sieht das schon etwas eleganter aus.

Mein Problem ist weiterhin, dass ich bei einer Auswahl von mehreren Bildern nur ein Bild angezeigt bekommen.. Woran kann das liegen?


Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;

public class WindowFrame extends JFrame {
	private DrawPictures viewComponent = new DrawPictures();
	public void init(){	
		JMenuBar menuBar;
		JMenu menu;
		menuBar = new JMenuBar();
		menu = new JMenu("Datei");
		menuBar.add(menu);		
		JMenuItem menuItem = new JMenuItem("Add");
		menuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JFileChooser fileChooser = new JFileChooser();
				File[] bild;
				fileChooser.setMultiSelectionEnabled(true);
				fileChooser.showOpenDialog( null );
			    bild = fileChooser.getSelectedFiles();   
		       if (bild != null) {
		    	   viewComponent.setImage(bild);
			    }			
			}		
		});
		menu.add(menuItem);
		add(viewComponent);
		setJMenuBar(menuBar);
		setSize(860,640);
		setVisible(true);
	}
}

Java:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;
import javax.swing.JPanel;


public class DrawPictures extends JPanel {
	
	  private Image image;
	  public void setImage( File[] file )
	  {
		  for (int i = 0; i <file.length; i++) {
			  image = Toolkit.getDefaultToolkit().getImage( file[i].getAbsolutePath() );
			  if ( image != null )
				  repaint();
		  }
	  }
	  @Override
	  protected void paintComponent( Graphics g )
	  {
		  int posX = 0;
	      int posY = 0;
	    if ( image != null )
	      
	      g.drawImage( image, posX, posY, 40, 40,  this );
	      posX = posX +240;
	      posY = posY +240;
	  }
}
 

Michael...

Top Contributor
Hab zwar die bisherigen Posts nicht gelesen, aber die Schleife
Java:
		  for (int i = 0; i <file.length; i++) {
			  image = Toolkit.getDefaultToolkit().getImage( file[i].getAbsolutePath() );
			  if ( image != null )
				  repaint();
		  }
führt dazu, das i.d.R nur das letzte Bild im Array gezeichnet wird. Die Schleife wird vermutlich so schnell abgearbeitet, dass auf dem Bildschirm gar keine Änderung sichtbar ist.

Soll das ganze in einer Art Slideshow ablaufen? Dann musst Du das ganze in einen Thread mit einem Delay nach jedem repaint() oder einen Timer auslagern.
 

granini

Bekanntes Mitglied
Ziel ist es die Files nebeneinander darzustellen.. Dann ist das natürlich auch mit der posX und posY quatsch von mir gewesen. Aber mir fällt jetzt keine wirkliche Lösung die Bilder zu positionieren...
 

eRaaaa

Top Contributor
?? Also...du skalierst die Bilder doch auf 40x40 Pixel (ist das nicht etwas zu klein? ;D )..d.h. jedes Bild wird jetzt genau so groß dargestellt. Wenn du nun das 1. Bild bei x=0, y=0 zeichnest, wo musst du dann auf der x-Achse das zweite zeichnen, damit es genau daneben gezeichnet wird? bei +40 vllt ? :)

Und das mit dem Image-Array war doch am Anfang gar nicht so schlecht ;/
Java:
public class DrawPictures extends JPanel {

	private Image[] images;

	public void setImage(File[] file) {
		images = new Image[file.length];
		for (int i = 0; i < file.length; i++) {
			try {
				images[i] = ImageIO.read(file[i]);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		repaint();
	}

	@Override
	protected void paintComponent(Graphics g) {
		int x=0,y=0;
		if(images != null){
			for (int i = 0; i < images.length; i++) {
				g.drawImage(images[i], x, y, 40, 40, this);
				x+=40;
			}
		}
	}
}

aber wie schon erwähnt kann das eben auch etwas länger dauern je nachdem wie viele Bilder du laden und anzeigen willst, daher könnte man sich auch überlegen dies in einem neuen Thread zu machen, damit der EDT eben nicht blockiert wird....
 

vannelle

Mitglied
Hallo zusammen,

Habe folgendes Problem, dass ich Bilder deren URLs in einem StringArray gespeichert werden
zeichnen möchte. Ungünstig ist, dass der Quelltext einer beliebigen URL nach Bildern durchsucht werden soll, und somit die Anzahl und Formate der Bilder stark variieren können.

Die Bilder sollen einfach untereinander auf ein JPanel gezeichnet werden.

So weit bin ich:
Java:
JPanel imagepanel = new JPanel();
.
.
ArrayList<String> speicher = new ArrayList<String>();
.
.
.

public void paintComponent(Graphics g) {
		if (speicher != null) {
			for (int i = 0; i < speicher.size(); i++) {
				Toolkit.getDefaultToolkit();
				Image img = Toolkit.getDefaultToolkit().createImage(speicher.get(i));
				img.getScaledInstance(20, 20, 20);
				int posX = 0;
				int posY = 0;
				g.drawImage(img, posX, posY, this);
				posX = posX + 10;
				posY = posY + 20;
			}
		}
	}

Leider wird da überhauptnichts gezeichnet.
(repaint() wird nach dem Scanvorgang der URL aufgerufen, nachdem der speicher befüllt wurde)
Über einen Lösungsvorschlag wie ich die Bilder untereinander bekomme wäre ich auch dankbar.
Vielen Dank schonmal für die Hilfe.

Vannelle
 

eRaaaa

Top Contributor
Hallo zusammen,

Habe folgendes Problem, dass ich Bilder deren URLs in einem StringArray gespeichert werden
zeichnen möchte. Ungünstig ist, dass der Quelltext einer beliebigen URL nach Bildern durchsucht werden soll, und somit die Anzahl und Formate der Bilder stark variieren können.

Die Bilder sollen einfach untereinander auf ein JPanel gezeichnet werden.

So weit bin ich:
Java:
JPanel imagepanel = new JPanel();
.
.
ArrayList<String> speicher = new ArrayList<String>();
.
.
.

public void paintComponent(Graphics g) {
		if (speicher != null) {
			for (int i = 0; i < speicher.size(); i++) {
				Toolkit.getDefaultToolkit();
				Image img = Toolkit.getDefaultToolkit().createImage(speicher.get(i));
				img.getScaledInstance(20, 20, 20);
				int posX = 0;
				int posY = 0;
				g.drawImage(img, posX, posY, this);
				posX = posX + 10;
				posY = posY + 20;
			}
		}
	}

Leider wird da überhauptnichts gezeichnet.
(repaint() wird nach dem Scanvorgang der URL aufgerufen, nachdem der speicher befüllt wurde)
Über einen Lösungsvorschlag wie ich die Bilder untereinander bekomme wäre ich auch dankbar.
Vielen Dank schonmal für die Hilfe.

Vannelle

Vllt solltest du nicht in jedem Schleifendurchgang posX und posY wieder auf 0 setzen *g* dann werden sie auch untereinander gezeichnet(wenn du denn nicht +20 addierst, sondern eben die Größe des Bildes!)
Besser wäre es wohl auch, die Bilder 1 x zu erstellen und das außerhalb von paintComponent...in paintComponent wirklich nur zeichnen!
Dein
Code:
getScaledInstance
ist a) falsch benutzt(das gibt ein neues Image zurück!!!!) und b) auch nicht die beste Lösung! (drawImage kann das Bild schon in der gewünschten Größe zeichnen, schau dir einfach mal die Parameter an)
Ich persönlich würde wohl auch ImageIO benutzen und dann die URL übergeben...aber da müsste man evtl. nochmal genauer drüber nachdenken :p
 

vannelle

Mitglied
mit ImageIO hab ichs auch schon versucht, sogar mit nem absoluten Pfad zu ner Bilddatei.
Leider wurde auch nichts gezeichnet ...

meinst du das so
Java:
	public void paintComponent(Graphics g) throws IOException {
		if (speicher != null) {
			for (int i = 0; i < speicher.size(); i++) {
				URL url = new URL(speicher.get(i));
				Image img = ImageIO.read(url); 
				g.drawImage(img, 100, 100, this);
			}
		}
	}

Über Position etc. mach ich mir Gedanken wenn ich es hinbekommen hab dass überhaupt etwas gezeichnet wird :p

Und muss ich nicht irgendwie der Paint-Methode sagen dass sie im JPanel imagepanel zeichnen soll?
Bin ein wenig verwirrt.

Vannelle
 

eRaaaa

Top Contributor
meinst du das so
Java:
	public void paintComponent(Graphics g) throws IOException {
		if (speicher != null) {
			for (int i = 0; i < speicher.size(); i++) {
				URL url = new URL(speicher.get(i));
				Image img = ImageIO.read(url); 
				g.drawImage(img, 100, 100, this);
			}
		}
	}

Über Position etc. mach ich mir Gedanken wenn ich es hinbekommen hab dass überhaupt etwas gezeichnet wird :p
Nein eher so:
Java:
					public void paintComponent(Graphics g)  {
						super.paintComponent(g);
						int x = 0,y=0;
						for (Image image : speicher) {
							g.drawImage(image, x, y, null);
							y+=image.getHeight(null);
						}
					}
Und muss ich nicht irgendwie der Paint-Methode sagen dass sie im JPanel imagepanel zeichnen soll?
Bin ein wenig verwirrt.

Vannelle

Okay, jetzt wird es Zeit dass du mal deinen gesamten Code zeigst(wieso erstellst du eig. keinen neuen Thread hier im Forum? ;/ )

Ein kleines Beispiel gibts von mir:
Java:
	public static void main(String[] args) {

		final List<Image> speicher = new ArrayList<Image>();
		try{
		speicher.add(ImageIO.read(new URL("http://www.google.de/intl/en_com/images/srpr/logo1w.png")));
		speicher.add(ImageIO.read(new URL("http://upload.wikimedia.org/wikipedia/commons/e/ec/Wikipedia-logo-v2-de.png")));
		}catch(IOException i){
			i.printStackTrace();
		}
		
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame frame = new JFrame();
				JPanel panel = new JPanel() {
					private int x,y;
					
					{
						//berechne Gesamthöhe+Breite des Panels
						for (Image image : speicher) {
							y+=image.getHeight(null);
							int width = image.getWidth(null);
							if(width>x){
								x = width;
							}
						}
						setSize(x, y);
						setPreferredSize(getSize());
					}
					
					public void paintComponent(Graphics g)  {
						super.paintComponent(g);
						int x = 0,y=0;
						for (Image image : speicher) {
							g.drawImage(image, x, y, null);
							y+=image.getHeight(null);
						}
					}
				};
				frame.add(panel);
				frame.pack();
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.setLocationRelativeTo(null);
				frame.setVisible(true);
			}
		});
	}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Bilder zeichnen, NullPointer Exception AWT, Swing, JavaFX & SWT 3
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
R JPanel - BufferedImage - zeichnen großer Bilder AWT, Swing, JavaFX & SWT 2
A Bilder skaliert zeichnen AWT, Swing, JavaFX & SWT 13
Q Auf mehreren JPanels Bilder zeichnen. AWT, Swing, JavaFX & SWT 5
D Bilder als "Film" zeichnen AWT, Swing, JavaFX & SWT 5
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
F Bilder zu ausführbarer Jar-Datei hinzufügen AWT, Swing, JavaFX & SWT 5
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
Linjutsu Den Inhalten aus einer ArrayList Bilder zuweisen (Kartenspiel) AWT, Swing, JavaFX & SWT 8
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
S AffineTranformation Bilder verschwinden von Anzeige bei Pan, Zoom AWT, Swing, JavaFX & SWT 6
G Bilder in javafx Project AWT, Swing, JavaFX & SWT 11
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
N eclipse Java, bilder benutzten Funktioniert nicht AWT, Swing, JavaFX & SWT 6
Kirby.exe Bilder in GUI einfügen AWT, Swing, JavaFX & SWT 8
T Bilder bei einem JFrame einfügen AWT, Swing, JavaFX & SWT 4
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
L Bilder werden in exportierter Datei nicht geladen AWT, Swing, JavaFX & SWT 6
C Bilder so einbinden, dass sie sich ändern AWT, Swing, JavaFX & SWT 6
J Bilder aus dem SceneBuilder werden in der Jar nicht dargestellt AWT, Swing, JavaFX & SWT 4
TheWhiteShadow JavaFX Bilder werden ungewollt Skaliert AWT, Swing, JavaFX & SWT 1
B JavaFX Bilder in einem Gewissen bereich halten AWT, Swing, JavaFX & SWT 1
J Bilder proportional verkleiner AWT, Swing, JavaFX & SWT 12
E Bilder skalieren AWT, Swing, JavaFX & SWT 4
DaCrazyJavaExpert Swing Bilder überlagern AWT, Swing, JavaFX & SWT 19
A Bilder als Hintergrund AWT, Swing, JavaFX & SWT 2
@SupressWarnings() JavaFX Bilder in executable jar laden AWT, Swing, JavaFX & SWT 5
Sugan JavaFX Bilder drucken AWT, Swing, JavaFX & SWT 0
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
Sugan Java FX Verzeichnisüberwachung -> Bilder auf GUI anzeigen AWT, Swing, JavaFX & SWT 4
E AWT Bilder als "Array" abspeichern. AWT, Swing, JavaFX & SWT 4
MrSnake Bilder aus Unterordner einfügen AWT, Swing, JavaFX & SWT 2
I 2D-Grafik Bilder Eingefügt, button jetzt im Hintergrund AWT, Swing, JavaFX & SWT 2
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
M Swing JTextPane, Bilder und Text-flow AWT, Swing, JavaFX & SWT 2
A Mit dem Scene Builder eine Collage erstellen (Bilder beziehen aus Flickr) AWT, Swing, JavaFX & SWT 1
thet1983 JTable Bilder AWT, Swing, JavaFX & SWT 6
GenerationLost Bilder an bestimmten Platz einfügen/Objekte visualisieren AWT, Swing, JavaFX & SWT 1
F Bilder in jFrame einfügen AWT, Swing, JavaFX & SWT 3
J Bilder als Variable an einem Objekt speichern AWT, Swing, JavaFX & SWT 3
I Swing Bilder werden nach Export nicht angezeigt AWT, Swing, JavaFX & SWT 1
D 2D-Grafik Bilder anzeigen AWT, Swing, JavaFX & SWT 4
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
vodkaz JFrame,Bilder und Zeitverzögerung AWT, Swing, JavaFX & SWT 2
A Swing Bilder werden nicht angezeigt AWT, Swing, JavaFX & SWT 3
I SWT Bilder, bzw. ein einzelnes Bild AWT, Swing, JavaFX & SWT 6
Xbody 2D-Grafik JavaFX Bilder transformieren AWT, Swing, JavaFX & SWT 2
C 2D-Grafik Steganographie - Verschlüsselung von Dateien in Bildern - Bilder zeigen schwarze Rechtecke AWT, Swing, JavaFX & SWT 13
P Durch Bilder Scrollen AWT, Swing, JavaFX & SWT 2
F Bilder werden nicht in's Array geladen AWT, Swing, JavaFX & SWT 4
K Bilder übereinanderlegen AWT, Swing, JavaFX & SWT 11
windl Querstreifen beim Bilder malen und anpassen an neue CPU AWT, Swing, JavaFX & SWT 12
V Fertige Komponente zum Anzeigen mehrerer Bilder AWT, Swing, JavaFX & SWT 5
Karuka 2D-Grafik Bilder in GridLayout einfügen AWT, Swing, JavaFX & SWT 7
J Bilder in ausführbare jar einbinden AWT, Swing, JavaFX & SWT 7
J Swing Bilder anzeigen in Gridlayout AWT, Swing, JavaFX & SWT 11
H 2D-Grafik Bilder laden ist nicht zuverlässig AWT, Swing, JavaFX & SWT 3
F Bilder ineinander kopieren AWT, Swing, JavaFX & SWT 3
P Bilder verkleinern AWT, Swing, JavaFX & SWT 2
C SWT Mehrere Bilder in GUI laden AWT, Swing, JavaFX & SWT 5
Furtano AWT Skalierung mehrerer Bilder / Histogramme im Fenster AWT, Swing, JavaFX & SWT 4
T 2D-Grafik Statisches Hintergrundbild, dynamische Bilder drüber AWT, Swing, JavaFX & SWT 2
C Zwei Bilder übereinander legen AWT, Swing, JavaFX & SWT 1
L [SWT] Daten und Bilder drucken AWT, Swing, JavaFX & SWT 2
S Flickr Bilder in Gui Oberfläche AWT, Swing, JavaFX & SWT 21
L Bilder im JPanel als Hintergrund - Swing AWT, Swing, JavaFX & SWT 2
K Bilder nacheinander einfügen AWT, Swing, JavaFX & SWT 3
H Bilder auf Buttons per Klick tauschen ( Puzzle ) AWT, Swing, JavaFX & SWT 8
H Bilder in Array zufällig anordnen AWT, Swing, JavaFX & SWT 4
P 2D-Grafik Viele Bilder zu einem Video AWT, Swing, JavaFX & SWT 3
J Vergleicher zweier Bilder AWT, Swing, JavaFX & SWT 2
C zwei Bilder nacheinander anzeigen AWT, Swing, JavaFX & SWT 2
L Swing Bilder über andere Bilder laden AWT, Swing, JavaFX & SWT 3
J Bilder überlappen AWT, Swing, JavaFX & SWT 18
P Bilder werden nach Änderung nicht angezeigt AWT, Swing, JavaFX & SWT 15
3 2D-Grafik Rechtecke auf Bilder legen und auslesen AWT, Swing, JavaFX & SWT 4
M Mehrere Bilder auf einmal anzeigen AWT, Swing, JavaFX & SWT 9
P Swing html mit bilder drin AWT, Swing, JavaFX & SWT 12
F Nicht alle Bilder werden angezeigt AWT, Swing, JavaFX & SWT 2
E Bilder auf JFrame AWT, Swing, JavaFX & SWT 7
R Bilder über URL einfügen AWT, Swing, JavaFX & SWT 4
F Applet zeigt Bilder nicht an AWT, Swing, JavaFX & SWT 5
M FileChooser Bilder auswählen AWT, Swing, JavaFX & SWT 8
L Swing Bilder im Icons-Ordner AWT, Swing, JavaFX & SWT 4
U Bilder in Jar werden nicht gefunden AWT, Swing, JavaFX & SWT 5
S SWT Canvas: Flackernde Bilder AWT, Swing, JavaFX & SWT 3
A Bilder vergleichen AWT, Swing, JavaFX & SWT 4
E Swing JTextPane Inhalt(Text und Bilder) als HTML text bekommen AWT, Swing, JavaFX & SWT 3
E AWT Bilder und Java AWT, Swing, JavaFX & SWT 11
P Bilder einfügen AWT, Swing, JavaFX & SWT 4
D Swing JEditorPane mit HTML aber ohne Bilder AWT, Swing, JavaFX & SWT 3
S Swing Kleine Bilder in Panel einfügen AWT, Swing, JavaFX & SWT 13
A AWT Bilder als Link verwenden? AWT, Swing, JavaFX & SWT 11
T SWT Wie Bilder aus JAR-Dateien einbinden? AWT, Swing, JavaFX & SWT 12
S Bilder aus der Google Book Search API auslesen AWT, Swing, JavaFX & SWT 3
J Bilder in JScrollPane zentrieren AWT, Swing, JavaFX & SWT 5
M Bilder in einem Textfeld darstellen AWT, Swing, JavaFX & SWT 2
N Bilder aus Infos generieren lassen. Welches Framework? AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben