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:
importjava.awt.*;importjava.awt.event.*;importjava.awt.image.*;importjava.io.*;importjavax.imageio.*;importjavax.swing.*;/**
* This class demonstrates how to load an Image from an external file
*/publicclassLoadImageAppextendsComponent{BufferedImage img;publicvoidpaint(Graphics g){
g.drawImage(img,0,0,null);}publicLoadImageApp(){try{
img =ImageIO.read(newFile("strawberry.jpg"));}catch(IOException e){}}publicDimensiongetPreferredSize(){if(img ==null){returnnewDimension(100,100);}else{returnnewDimension(img.getWidth(null), img.getHeight(null));}}publicstaticvoidmain(String[] args){JFrame f =newJFrame("Load Image Sample");
f.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvent e){System.exit(0);}});
f.add(newLoadImageApp());
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:
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.