[java] Image in een Frame probleem

Pagina: 1
Acties:

  • MoNo79
  • Registratie: Juli 2001
  • Laatst online: 21-03 21:47
Ik wil een plaatje in een frame afbeelden, ik had vele voorbeelden van appets maar niet van aplicatie's
Uit het boek heb ik alles zo veel ik kan uit gezocht, ik dacht dit moet toch werken.

Ik zie het probleem echt niet, probleem ontstaat in de init() :X

De code is veel meer maar dat heb ik verwijdert, om het probleem overzichtelijkr te maken.
Java:
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
package bridge_aplicatie;
import javax.swing.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.Image;
import  java.net.URL;


public class Bridge extends JFrame{

private Image plaatje;        

 
public void paint(Graphics g)
{
Image myImage = java.awt.Toolkit.getDefaultToolkit().getImage("test.jpg");
   if( myImage != null ){
   g.drawImage( myImage, 20, 20, 300, 300, this );
   }
    else{
      System.err.println( "Image was not loaded" );
    }
}//paint

  //Main method
  public static void main(String[] args) {
   
    Bridge frame = new Bridge();
    frame.setSize(800,600);
    frame.setVisible(true);
    frame.addWindowListener(new WindowAdapter(){
      public void windowClosing(WindowEvent e){
        System.exit(0);
      }
    });
  }

}// bridge

[ Voor 36% gewijzigd door MoNo79 op 03-02-2010 16:39 . Reden: Code aangepast ]


  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 24-05 20:08
// hier geeft hij een foutmelding:
//cannot resolve symbol: method createImage (java.lang.String)in class //]]
//bridge_aplicatie.Bridge at line 35 (35:13)
Je hebt geen methode createImage (String) in je klasse Bridge en ook niet in bovenliggende klasses (althans, geen public of protected methode createImage(String) in dat geval).

  • MoNo79
  • Registratie: Juli 2001
  • Laatst online: 21-03 21:47
Ik dacht dat je met:
plaatje = getImage(getDocumentBase(),"Pics/achter1.jpg");

Image in het opject zet, teminste zo staat het in mijn boek.
Er staat niks in over createImage(string).

-edit-

Hij jij mischien een snel idee hoe je een plaatje in het object stopt?

[ Voor 39% gewijzigd door MoNo79 op 05-02-2004 00:15 ]


Verwijderd

Persoonlijk plaats ik images in een JLabel die je dan als component aan je frame toevoegt... nouja de contentpane van je frame wat een JPanel is.

JLabels kan je instellen met een ImageIcon (kan ook een gewone Image zijn denk ik maar ImageIcons zijn wel zo handig) wat de effectieve link maakt met je figuur.
Denk er wel even aan waar je je figuurtjes bewaard want als ze niet ergens in je classpath zitten kan je ze niet ophalen met getResource().

  • MoNo79
  • Registratie: Juli 2001
  • Laatst online: 21-03 21:47
Ik heb een verkeerde foutmelding in de code gezet, sorry dacht dat ik hem al gebuild had, dit was nog een oude fout melding.

de foutmelding is:

cannot resolve symbol: method getDocumentBase ()in class bridge_aplicatie.Bridge at line 35 (35:22)

  • MoNo79
  • Registratie: Juli 2001
  • Laatst online: 21-03 21:47
Verwijderd schreef op 05 februari 2004 @ 00:24:
Persoonlijk plaats ik images in een JLabel die je dan als component aan je frame toevoegt... nouja de contentpane van je frame wat een JPanel is.

JLabels kan je instellen met een ImageIcon (kan ook een gewone Image zijn denk ik maar ImageIcons zijn wel zo handig) wat de effectieve link maakt met je figuur.
Denk er wel even aan waar je je figuurtjes bewaard want als ze niet ergens in je classpath zitten kan je ze niet ophalen met getResource().
Ik gebuik Graphics g want dan heb je wat meer vrijheid, dat is lekker makkelijk om wat lijnen er bij te tekenen en zo. :)

Verwijderd

getDocumentBase() is niet een function uit JFrame maar uit Applet

http://java.sun.com/j2se/...et.html#getDocumentBase()

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Als aanvulling op DarkieDuck: Je zult Tookit.getImage() moeten gebruiken :)
offtopic:
Dan blijft het nog Toolkit.getImage() donderwolk, immers getImage blijft een method van de interface Toolkit. Dat je eerst een instantie daarvan moet aanvragen heeft hier geen betrekking op :+

[ Voor 60% gewijzigd door Glimi op 05-02-2004 09:08 ]


  • Donderwolk
  • Registratie: Januari 2002
  • Laatst online: 15-05 15:27
Glimi schreef op 05 februari 2004 @ 08:57:
Als aanvulling op DarkieDuck: Je zult Tookit.getImage() moeten gebruiken :)
java.awt.Toolkit.getDefaultToolkit().getImage()

is het volgens mij.

[ Voor 104% gewijzigd door Donderwolk op 05-02-2004 09:16 . Reden: Het is nog wat te vroeg. :X ]

Pwnd


  • MoNo79
  • Registratie: Juli 2001
  • Laatst online: 21-03 21:47
Donderwolk schreef op 05 februari 2004 @ 09:05:
[...]


java.awt.Toolkit.getDefaultToolkit().getImage()

is het volgens mij.
Nou ik krijg hier geen foutmelding op dus dit zou wel goed zijn, alleen het plaatje komt nog niet op beeld.
"Hallo met mij" krijg ik wel op beeld gepresenteerd, ik heb mijn paint methode hier even onder gezet.

Java:
1
2
3
4
5
6
7
  public void paint(Graphics g)
{
  
  g.drawImage(java.awt.Toolkit.getDefaultToolkit().getImage("test.jpg"),20,20,300,300,this);
  g.drawString("Hallo met mij",100,pos);

}

[ Voor 41% gewijzigd door MoNo79 op 03-02-2010 16:40 ]


Verwijderd

Ik zie dat je trouwens ook een functie init() hebt maar deze nooit aanroept

init() is ook weer een functie uit Applet die door je browser wordt aangeroepen zodra je een Applet laad. Werderom wordt deze functie niet aangeroepen als je een JFrame hebt...

Als ik jou was zal ik de getImage uit je paint methode halen en deze in je contructor zetten en een Mediatracker gebruiker om er voor te zorgen dat ie eerst het plaatje laad en daarna pas op beeld laad zien.

Voorbeeld van hoe MediaTracker te gebruiken
http://java.sun.com/j2se/...ava/awt/MediaTracker.html

  • Donderwolk
  • Registratie: Januari 2002
  • Laatst online: 15-05 15:27
MoNo79 schreef op 05 februari 2004 @ 13:15:
[...]


Nou ik krijg hier geen foutmelding op dus dit zou wel goed zijn, alleen het plaatje komt nog niet op beeld.
"Hallo met mij" krijg ik wel op beeld gepresenteerd, ik heb mijn paint methode hier even onder gezet.

code:
1
2
3
4
5
6
7
  public void paint(Graphics g)
{
  
  g.drawImage(java.awt.Toolkit.getDefaultToolkit().getImage("test.jpg"),20,20,300,300,this);
  g.drawString("Hallo met mij",100,pos);

}
Verander dit even:

Java:
1
2
3
4
5
6
7
Image myImage = java.awt.Toolkit.getDefaultToolkit().getImage("test.jpg");
if( myImage != null ){
  g.drawImage( myImage, 20, 20, 300, 300, this );
}
else{
  System.err.println( "Image was not loaded" );
}

[ Voor 5% gewijzigd door Donderwolk op 05-02-2004 15:15 ]

Pwnd


  • MoNo79
  • Registratie: Juli 2001
  • Laatst online: 21-03 21:47
Donderwolk schreef op 05 februari 2004 @ 15:13:
[...]


Verander dit even:

Java:
1
2
3
4
5
6
7
Image myImage = java.awt.Toolkit.getDefaultToolkit().getImage("test.jpg");
if( myImage != null ){
  g.drawImage( myImage, 20, 20, 300, 300, this );
}
else{
  System.err.println( "Image was not loaded" );
}
Het plaatje wordt dus wel gelagen, maar het geeft het plaatje niet weer, ik heb de code ook aangepast zoals ik het project nu heb.

[ Voor 9% gewijzigd door MoNo79 op 05-02-2004 15:26 ]


  • MoNo79
  • Registratie: Juli 2001
  • Laatst online: 21-03 21:47
Verwijderd schreef op 05 februari 2004 @ 14:05:
Ik zie dat je trouwens ook een functie init() hebt maar deze nooit aanroept

init() is ook weer een functie uit Applet die door je browser wordt aangeroepen zodra je een Applet laad. Werderom wordt deze functie niet aangeroepen als je een JFrame hebt...

Als ik jou was zal ik de getImage uit je paint methode halen en deze in je contructor zetten en een Mediatracker gebruiker om er voor te zorgen dat ie eerst het plaatje laad en daarna pas op beeld laad zien.

Voorbeeld van hoe MediaTracker te gebruiken
http://java.sun.com/j2se/...ava/awt/MediaTracker.html
Deze voorbeeld is ook van een applet, dus kan ik die niet 123 gebruiken in een aplicatie.
-edit -

Ik ben het toch aan het proberen.

-edit-

Zelfs met media tracker bijft het plaatje weg 8)7

[ Voor 7% gewijzigd door MoNo79 op 05-02-2004 15:42 ]


  • Donderwolk
  • Registratie: Januari 2002
  • Laatst online: 15-05 15:27
Kun je uberhaupt iets op je Frame tekenen?

Probeer eens iets anders te tekenen, een lijn, vierkant, oid.

[ Voor 44% gewijzigd door Donderwolk op 05-02-2004 15:51 ]

Pwnd


  • MoNo79
  • Registratie: Juli 2001
  • Laatst online: 21-03 21:47
Donderwolk schreef op 05 februari 2004 @ 15:51:
Kun je uberhaupt iets op je Frame tekenen?

Probeer eens iets anders te tekenen, een lijn, vierkant, oid.
Ja een text of een line werkt prima

Als ik deze regel hier onder in de paint(graphics g) metode gooit werkt het gewoon.

g.drawString("Hallo Wordld",10,10);

  • Donderwolk
  • Registratie: Januari 2002
  • Laatst online: 15-05 15:27
Hmmm het werkte hier ook niet, waarschijnlijk wordt toch je plaatje niet ingeladen.
Als je JBuilder gebruikt zet dan in je project properties je test pad even goed, waarschijnlijk is dat het probleem.
Ik heb het volgende stukje code geschreven om te testen of een bestand bestaat.
Dat andere stukje code met ( myImage != null ) werkt kennelijk niet goed.

Java:
1
2
3
4
5
6
7
8
  java.io.File f = new java.io.File( "test.jpg" );
  if( f.exists() ){
    Image myImage = java.awt.Toolkit.getDefaultToolkit().getImage("test.jpg");
    g.drawImage(myImage, 20, 20, 300, 300, this);
  }
  else{
    System.out.println( "file not found" );
  }

[ Voor 10% gewijzigd door Donderwolk op 05-02-2004 18:22 ]

Pwnd


  • MoNo79
  • Registratie: Juli 2001
  • Laatst online: 21-03 21:47
Donderwolk schreef op 05 februari 2004 @ 18:21:
Hmmm het werkte hier ook niet, waarschijnlijk wordt toch je plaatje niet ingeladen.
Als je JBuilder gebruikt zet dan in je project properties je test pad even goed, waarschijnlijk is dat het probleem.
Ik heb het volgende stukje code geschreven om te testen of een bestand bestaat.
Dat andere stukje code met ( myImage != null ) werkt kennelijk niet goed.
Ik heb je code geprobeerd, en het werkt goed, ik heb voor de zekerheid een foute filenaam ingevult, en hij zecht dan ook prima dat hij de file heeft gevonden.

Waarom het plaatje niet in de image object komt, geen iedee.

  • MoNo79
  • Registratie: Juli 2001
  • Laatst online: 21-03 21:47
/

[ Voor 100% gewijzigd door MoNo79 op 05-02-2004 20:21 ]


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Maak een JLabel en plaats daar de Image in.
JFrame is een container class voor andere JComponents en dus niet bedoeld om direct Images op te tekenen.

Verwijderd

Heb eventjes gekeken en als je een jpg maakt en onderstaande code gebruikt werkt het prima.


Java:
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
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.MediaTracker;

public class Test extends JFrame {

  public void paint(Graphics g) {
    java.io.File f = new java.io.File("Test.jpg");
    if (f.exists()) {
      Image image = java.awt.Toolkit.getDefaultToolkit().getImage("Test.jpg");
      MediaTracker media = new MediaTracker(this);
      media.addImage(image,0);
      try { media.waitForID(0); }
      catch (InterruptedException e) {}
      g.drawImage(image,0,0,800,600,null);
    }
  } //paint

  //Main method
  public static void main(String[] args) {

    Test frame = new Test();
    frame.setSize(800, 600);
    frame.setVisible(true);

    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
  }

} // bridge

[ Voor 6% gewijzigd door Verwijderd op 05-02-2004 21:39 ]


  • MoNo79
  • Registratie: Juli 2001
  • Laatst online: 21-03 21:47
Het werkt inderdaad, allen hartelijk bedank voor jullie hulp.
Deze kan opslot.
Pagina: 1