Grafik in Frame laden

opucukler

Mitglied
hi leute ich habe ein problem ich versuche ein bild in ein JFrame zu laden doch klappt es bei mir nicht ..
es erscheint nur ein leeres fenster ..
ich habe das bild im selben ordner abgelegt da wo auch meine klassen sind ..

hat jemand da einen quellcode oder ne idee ? ich bin neu in diesem forum und das ist meine erste frage wäre cool wenn ich gleich erfolg haben sollte ich bedanke mich im voraus für eure hilfe
 
ich habe einen quellcode von der offiziellen java site die auf englisch ist.. also die datei heißt loadimageapp

und da ist auch ein bild gegeben strawbeery.jpg das man dann laden soll aber ich weiß halt nicht genau wie ich das bild abrufen soll...


Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

/**
 * This class demonstrates how to load an Image from an external file
 */
public class LoadImageApp extends Component {
          
    BufferedImage img;

    public void paint(Graphics g) {
        g.drawImage(img, 0, 0, null);
    }

    public LoadImageApp() {
       try {
           img = ImageIO.read(new File("strawberry.jpg"));
       } catch (IOException e) {
       }

    }

    public Dimension getPreferredSize() {
        if (img == null) {
             return new Dimension(100,100);
        } else {
           return new Dimension(img.getWidth(null), img.getHeight(null));
       }
    }

    public static void main(String[] args) {

        JFrame f = new JFrame("Load Image Sample");
            
        f.addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });

        f.add(new LoadImageApp());
        f.pack();
        f.setVisible(true);
    }
}
 
also generell gilt die Regel awt und swing niemals mischen also bei nem JFrame auch JComponent benutzen sonst kommts zu ungewollten nebeneffektten. Bei swing überschreibt man dann paintComponent statt paint und am besten ist es das bild über getClass().getRessource(...) bzw. Klassenname.class.getRessource() zu laden statt über Files (schon allein weil Files nicht in JARs funktionieren).
zum Bsp. so:

Java:
JFrame window = new JFrame("Titel");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BufferedImage img = ImageIO.read(Klassenname.class.getRessource("name.jpg"));
JComponent comp = new JComponent(){
  @Override
  protected void paintComponent(Graphics g){
     super.paintComponent(g);
     g.drawImage(img, 0, 0, null);
  }
}
window.add(comp);
window.pack();
 
die angabe bei getRessource ist relativ zu der Klasse also wenn die Klasse und das Bild im gleichen package liegen, musst du nur den namen angeben. Stattdessen kannst du auch
Code:
getClass().getClassLoader().getRessource(...)
benutzen, da ist die angabe relativ zum Classpath.
 
ich weiß die frage klingt blöd aber ich habe ehrlich null ahnung vom programmieren fange grad neu an..
wie mache ich das ? muss ich da über add external archives das bild einfügen ?
 
das bild muss einfach da liegen wo auch die class dateien sind (bei IDEs der bin ordner) und dann gibt du relativ zu der Klasse aus der du das Bild lädst den Pfad an, in deinem Fall einfach nur den Namen da ja gleicher Ordner.
 
Ach machs doch einfach so:

Java:
public class Pic extends JFrame{
	
	JPanel pane = null;																	
	JLabel hierKommtDasImageDrauf = null;
	ImageIcon icon = null;	


        public Pic() {
		super("Picture View");
		icon = new ImageIcon(this.getClass().getResource("DeinBild.png"));		
		pane = new JPanel();	
		hierKommtDasImageDrauf = new JLabel(icon);
		pane.add(hierKommtDasImageDrauf);
                setContentPane(pane);
	        setVisible(true);
	        pack();

}}

Java:
public class Main {
		
	
	public static void main(String[] args) throws Exception {
		
		new Pic();

	}
}

Solltest du auf das Bild etwas packen wollen wie Labels oder Buttons etc. nimm einfach das ImagePanel.
 
Zuletzt bearbeitet:

Zurück
Oben