-
Hallo alle zusammen ich habe da ein Problem ist warscheinlich banal aber ich blicks gerade nicht mehr

Das ganze Programm wäre zuviel drum hier die wichtigsten Teile
In diesem Panel soll das Bild und ein Koordinatenkreuz gezeichnet werden
Code :1 2 3 4 5 6
pnlBildKoordinate =new JPanel(); pnlBildKoordinate.add(grafikKoor); mainFrame.getContentPane().add(BorderLayout.CENTER,pnlBildKoordinate); mainFrame.setSize(500, 500); mainFrame.setVisible(true);
die grafikKoor beinhaltet den folgenden Code
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
package Hilfsklassen; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import javax.swing.ImageIcon; import javax.swing.JPanel; public class grafikKoordinate extends JPanel { Werte classWerte; public grafikKoordinate(Werte p_classWerte) { this.classWerte=p_classWerte; this.setPreferredSize(new Dimension(400,400)); } public void paintComponent (Graphics g) { super.paintComponent(g); g.setColor(Color.MAGENTA); g.drawLine(classWerte.get_iGrafikX(), 0, classWerte.get_iGrafikX(), 400); g.drawLine(0, classWerte.get_iGrafikY(), 400, classWerte.get_iGrafikY()); g.drawOval(classWerte.get_iGrafikX()-20, classWerte.get_iGrafikY()-20, 40, 40); g.drawString("x: "+classWerte.get_iXPos(), classWerte.get_iGrafikX()+20, classWerte.get_iGrafikY()-40); g.drawString("y: "+classWerte.get_iYPos(), classWerte.get_iGrafikX()+20, classWerte.get_iGrafikY()-20); g.drawImage(new ImageIcon("Copy of AstronomieSoftware/src/Hilfsklassen/sterne_klein_gif.gif").getImage(),0,0,null); } }
die Striche und den Kreis zeigt es an das Bild allerdings nicht hab schon einiges versucht wie zb mit Jpg und Gif bildern mit null und this als letzten Übergabewert mit superpaint drin und drausen hat aber alles nichts gebracht hoffe mir kann hier jemand weiterhelfen
-
02.05.11 13:14 #2SE Tutorials.de Gastzugang
Also erstens solltest du ERST das Bild zeichnen und DANN das Koordinatensystem ... ansonsten wird das nämlich vom Bild übermalt.
Zweitens : erstelle doch erstmal das ImageIcon ... und dann zieh das Image raus ... und prüf dann erstmal ob das nicht zufällig NULL ist ...
Einfacher geht es ein File-Objekt zu nehmen ... mit exists() prüfen ob es existiert ... und dann mit toURI().toURL() ne URL draus machen und diesen dann ImageIcon übergeben.
Weil ich würde jetzt mal drauf wetten das das File was du glaubst zu lesen garnicht existiert.
-
Hab das wie folgt gemacht
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public void paintComponent (Graphics g) { super.paintComponent(g); if (imageIcon==null) System.out.println("Bild ist nicht da"); else System.out.println("Bild is da"); g.drawImage(imageIcon.getImage(),0,0,null); g.setColor(Color.MAGENTA); g.drawLine(classWerte.get_iGrafikX(), 0, classWerte.get_iGrafikX(), 400); g.drawLine(0, classWerte.get_iGrafikY(), 400, classWerte.get_iGrafikY()); g.drawOval(classWerte.get_iGrafikX()-20, classWerte.get_iGrafikY()-20, 40, 40); g.drawString("x: "+classWerte.get_iXPos(), classWerte.get_iGrafikX()+20, classWerte.get_iGrafikY()-40); g.drawString("y: "+classWerte.get_iYPos(), classWerte.get_iGrafikX()+20, classWerte.get_iGrafikY()-20);
und er sagt mir "Bild ist da" das is es schon mal nicht und drawImage ist jetzt auch oben das ist es auch nicht
-
02.05.11 14:12 #4
Öhm... Es liegt wohl eher daran, dass das Bild noch nicht geladen ist, aber schon gezeichnet werden soll. Dafür gibt es die Klasse MediaTracker, mit der man dafür sorgen kann, dass nix passiert bis alle Bilder geladen wurden.
Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
02.05.11 14:19 #5SE Tutorials.de Gastzugang
Es ist sowieso schlecht das Bild erst in der paintComponent()-Methode zu erzeugen / laden.
Du solltest dies so früh wie möglich tun. Also schon in main oder einer extra Methode.
Das mit dem MediaTracker habe ich bei vielen hier schon gesehen ... kenne mich selbst damit aber leider nicht aus.
Und das imageIcon nicht NULL ist ist klar weil du es ja irgendwo mit new ImageIcon() erzeugt hast ... was wichtig ist ob der Inhalt NULL ist ... daher das mit File und URL und so ...
Außerdem macht mich die Ordnerbezeichnung "Copy of " sorgen das du mit einer alten Kopie des Ordners arbeitest aber alle änderungen im Original machst ... also greife mal ABSOLUT auf das Bild zu ... es kann sein das der Pfad falsch ist.
-
Lade jetzt im Konstruktor das bild und habe auch einen Mediatracker eingefügt geht aber noch immer nicht
Hier die Graphiks Methode:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
package Hilfsklassen; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import javax.swing.ImageIcon; import javax.swing.JPanel; public class grafikKoordinate extends JPanel { private static final long serialVersionUID = 1L; Werte classWerte; ImageIcon imageIc; Image img; MediaTracker mediaTracker; public grafikKoordinate(Werte p_classWerte) { this.classWerte=p_classWerte; this.setPreferredSize(new Dimension(400,400)); // imageIc =new ImageIcon("Copy of AstronomieSoftware/src/Hilfsklassen/sterne_klein_gif.gif"); img = getToolkit().getImage("Copy of AstronomieSoftware/src/Hilfsklassen/sterne_klein.jpg"); mediaTracker =new MediaTracker(this); mediaTracker.addImage(img, 1); try { mediaTracker.waitForAll(); } catch (InterruptedException e) { e.printStackTrace(); } } public void paintComponent (Graphics g) { super.paintComponent(g); //if (mediaTracker.checkID(1) == true) g.drawImage(img,0,0,this); g.setColor(Color.MAGENTA); g.drawLine(classWerte.get_iGrafikX(), 0, classWerte.get_iGrafikX(), 400); g.drawLine(0, classWerte.get_iGrafikY(), 400, classWerte.get_iGrafikY()); g.drawOval(classWerte.get_iGrafikX()-20, classWerte.get_iGrafikY()-20, 40, 40); g.drawString("x: "+classWerte.get_iXPos(), classWerte.get_iGrafikX()+20, classWerte.get_iGrafikY()-40); g.drawString("y: "+classWerte.get_iYPos(), classWerte.get_iGrafikX()+20, classWerte.get_iGrafikY()-20); } }
Beim PanelCode hat sich nichts geändert:
Code :1 2 3 4 5 6 7
pnlBildKoordinate =new JPanel(); pnlBildKoordinate.add(grafikKoor); pnlBildKoordinate.setVisible(true); mainFrame.getContentPane().add(BorderLayout.CENTER,pnlBildKoordinate); mainFrame.setSize(500, 500); mainFrame.setVisible(true);
-
03.05.11 14:06 #7SE Tutorials.de Gastzugang
Warum machst du es denn nicht mal so wie ich es dir Vorgeschlagen habe ?
Ein File-Objekt erzeugen .. mit if(file.exists()) prüfen ob es das File überhaupt gibt ... dann mit .toURI().toURL() die URL rausziehen und diese ImageIcon als parameter übergeben.
Mehr sag ich dazu jetzt erstmal nicht da ich MediaTracker wie gesagt noch nie verwendet habe.
Wenn das immer nocht nicht funktioniert dann versuch mal die andere drawImage()-Methode
-
Danke für deine Anregung nachdem ich mal High und Width des Img geprüft habe und -1 raus bekom war mir klar das es das Bild nicht lädt nach ein paar rechergen und versuchen habe ich herausgefunden das mein Pfad zu lang ist
Code :1
Hilfsklassen/sterne_klein.jpg
hatt ausgereicht und dann hat alles geklappt danke an alle ihr seit spitze
-
10.05.11 09:33 #9SE Tutorials.de Gastzugang
Tja ... wenn du es mal mit nem File-Objekt geprüft hättest wäre dir das vorher aufgefallen. Aber du wolltest ja nicht auf mich hören.
Ähnliche Themen
-
JPanel im FlowLayout: zeigt JScrollPane nicht an
Von Sacrent im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 28.05.10, 14:26 -
IE zeigt Bild komisch an, FF dafür Linkfarbe nicht (immer)
Von Khyrsanth im Forum CSSAntworten: 14Letzter Beitrag: 08.07.09, 07:49 -
JPanel mit Bild
Von $$Money$$ im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 18.12.08, 14:18 -
[imagejpeg] Zeigt gespeichertes Bild nicht an!?
Von BiepoN im Forum PHPAntworten: 2Letzter Beitrag: 25.01.06, 13:14 -
Änderndes Bild im JPanel
Von mashine-obf im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 6Letzter Beitrag: 21.02.05, 20:33



1Danke


Zitieren
Login





