tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von SE
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
855
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    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
     

  2. #2
    SE 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.
     

  3. #3
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    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
     

  4. #4
    Avatar von Akeshihiro
    Akeshihiro Akeshihiro ist offline Mitglied Platin
    Registriert seit
    Aug 2008
    Ort
    Kirchlengern (NRW)
    Beiträge
    647
    Ö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 ;)

  5. #5
    SE 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.
     

  6. #6
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    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);
     

  7. #7
    SE 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
    Code java:
    1
    
    Graphics.drawImage(Image, x, y, width, height, null);
    Eklaf bedankt sich. 

  8. #8
    Eklaf Eklaf ist offline Mitglied Bronze
    Registriert seit
    Jun 2010
    Beiträge
    37
    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
     

  9. #9
    SE 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

  1. JPanel im FlowLayout: zeigt JScrollPane nicht an
    Von Sacrent im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 28.05.10, 14:26
  2. Antworten: 14
    Letzter Beitrag: 08.07.09, 07:49
  3. JPanel mit Bild
    Von $$Money$$ im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 18.12.08, 14:18
  4. Antworten: 2
    Letzter Beitrag: 25.01.06, 13:14
  5. Änderndes Bild im JPanel
    Von mashine-obf im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 6
    Letzter Beitrag: 21.02.05, 20:33

Stichworte