Newsgroup: it.comp.java
Titolo: Problemi con le immagini

Buona sera,
nuovo progetto che tento di sviluppare e nuovo problema...altrimenti stavo
male :P
Questa volta il mio problema è con le immagini!
Allora...parto con:
Panel panel = new Panel();
Image pippo = Toolkit.getDefaultToolkit().getImage("dorso.gif");
poi ho tentato la soluzione:
Graphics g = panel.getGraphics();
g.drawImage(pippo,100,100,70,100,this);
ma nonostante validate e simili mi viene dato un errore durante
l'eseguzione!
Ora il mio obiettivo è quello di inserire l'immagine (o più immagini) nel
pannello e a seguito di alcuni eventi, le immagini posso essere rimosse
oppure cambiare le coordinate!
Che implementazione suggerite?!
Con le applet ero riuscito a farlo...ma con i pannelli la cosa sembra
diffente...di là l'immagine la caricavo con Image pipppo =
getImage(getCodeBase(),"pippo.gif"); ma quà non funge...
Ho dato uno sguardo ad un po di documentazione, ma visto che sono quà, non
c'ho tirato fuori le gambe :(
grazie
byez
B@STI

 Che implementazione suggerite?!
Prova a mettere una JLabel nel panel e a inserire nella label un' immagine
con il metodo setIcon
Bye!
Alex.

 con il metodo setIcon
Jlabel?
What is this? Non le ho mai sentite!
thx
byez
B@STI

 What is this? Non le ho mai sentite!
Mi rispondo da solo....sono oggetti della classe Swing....il problema è che
per motivi didattici sono costretto ad utilizzare le AWT :(
Come posso gestire le immagini in awt?
Speravo con il drawImage ma non funziona... :(
thx
Byez
B@STI

 Speravo con il drawImage ma non funziona... :(
Questo ti dovrebbe funzionare: creati una classe MyPanel che estende Panel e
disegni l'immagine nel metodo paint()
class MyPanel extends panel
{
private Toolkit b = Toolkit.getDefaultToolkit();
private Image img;
 public MyPanel()
 {
  super();
  img = b.getImage("c:\\bild.jpg");
 }
 public void paint(Graphics g)
 {
  g.drawImage(img,0,0,this);
  super.paint(g);
 }
}
Ciao!
Alex.

Mille grazie, perň in questo modo 1, nn mi funziona ancora, 2 non capisco
come posso ridefinire l'eventuale immagine, se gli voglio cambiare x,y o
img, o rimuoverla durante il corso del programma?
Cmq quello che ho scritto č quanto
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.Toolkit.*;
public class prova extends Frame{
  private static Frame f;
 public prova()
 {
 MyPanel p = new MyPanel();
 f.add(p);
 }
 public static void main(String argv[]) {
    f = new prova();
    f.setTitle("Prova");
    f.setSize(600, 400);
    f.setVisible(true);
    f.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
  }
    class MyPanel extends Panel
{
private Toolkit b = Toolkit.getDefaultToolkit();
private Image img;
 public MyPanel()
 {
  super();
  img = b.getImage("c:\\dorso.gif");
 }
 public void paint(Graphics g)
 {
  g.drawImage(img,0,0,this);
  super.paint(g);
 }
}
}
Mi lancia la nullpointerException
mille grazie
byez
B@STI

 img, o rimuoverla durante il corso del programma?
La versione corretta č cosě.
Per cambiare le coordinate e/o l'immagine rappresenta x,y, e img come
varibili private di MyPanel e scrivi dei metodi setX, setY, SetImg che
modificano tali valori.
Nel tuo metodo paint() invece dei valori metti i parametri e il gioco č
fatto.
Tanto per capirci:
class MyPanel extends Panel
{
private Toolkit b = Toolkit.getDefaultToolkit();
private Image img;
private int x;
^^^^^^^^^
private int y;
^^^^^^^^^
 public MyPanel()
 {
  super();
  img = b.getImage("c:\\dorso.gif");
    x=0;
^^^^^^^
    y=0;
^^^^^^^
 }
 public void paint(Graphics g)
 {
  g.drawImage(img,x,y,this);
^^^^^^^^^^^^^^^^^^^^^^
  super.paint(g);
 }
public void setX(int x) {
    this.x = x;
}
.....
[stessa cosa per y e img]
}
Qui invece trovi la versione corretta della classe prova.
public class prova extends Frame{
  private static Frame f;
 public prova() { }
 public static void main(String argv[]) {
    f = new prova();
    MyPanel p = new MyPanel();
    f.add(p);
    f.setTitle("Prova");
    f.setSize(600, 400);
    f.setVisible(true);
    f.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
  }
}
Ciao
Alex


Normalmente non basta fare getImage e poi drawImage ma bisogna anche
attendere che l'immagine sia pronta per l'uso. Il sintomo e' che viene
disegnato un blocco nero al posto dell'immagine. Se ti dovesse capitare
usa il seguante codice per attendere:
MediaTracker mt = new MediaTracker(target);
mt.addImage(i,0);
try {
	mt.waitForAll();
}
catch(InterruptedException e) {
	e.printStackTrace();
}
mt.removeImage(i);
mt = null;
target e' un Component, vedi la doc di MediaTracker per maggiori
dettagli.
ciao
-- 
Seti@Home Java Applets
http://www.mycgiserver.com/~maruko/

> Il sintomo e' che viene disegnato un blocco nero al posto dell'immagine.
A me su frame senza sfondo...quindi bianco, non veniva nemmeno il blocco
nero!
thx
byez
B@STI

     MyPanel p = new MyPanel();
quà mi da questo errore in compilazione
C:\programmazione\java\prova\prova.java:10: non-static variable this cannot
be referenced from a static context MyPanel p = new MyPanel(); ^ 1 error
:o e sinceramente non capisco perchè!
Mi viene quasi da piangere  :'-(
1000 grazie per la pazienza che stai mostrando!
byez
B@STI

Ho appena scoperto che il problema si risolve se dichiaro MyPanel come
public static class e poi se voglio dichiarare MyPanel p = new MyPanel();
fra le istanze di classe anch'essa deve essere statica!
Però finalmente riesco a visualizzare l'immagine :D
E direi che è già qualcosa!
Ora credo che avrò altri problemi...ma vedremo...un passo per volta!
byez
 B@STI


Guarda che MyPanel la devi mettere in un file separato, compilarla e
importarla nel file del main, se no il compilatore la prende come una classe
interna.....
Bye!
Alex.