Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 24
  1. #11
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Vediamo se riesco, nel frattempo, a darti qualche spiegazione.

    Diciamo che tutti i componenti grafici (Frame, Pannelli, Bottoni, ecc) hanno un oggetto che si occupa di disegnarli a video. Questo particolare oggetto è responsabile del disegno a video del componente ed entra in gioco ogni volta che c'è bisogno di visualizzare il componente (ad esempio, se ho un pannello a cui è stata sovrapposta una finestra, nel momento in cui sposto la finestra è necessario ridisegnarlo a video, affinchè l'utente lo veda sul monitor). Questo oggetto, quindi, viene chiamato in causa dal sistema operativo, che gli dice "ridisegna il componente perchè ora è visibile a video".
    Questo oggetto si chiama Graphics e, come tutti gli oggetti Java, possiede dei metodi che permettono di manipolarlo.
    Dato che è il sistema operativo a "comandare" questo oggetto, non ha molto senso che noi ce ne creiamo uno: sfruttiamo direttamente quello che ci viene fornito. Per andarlo ad utilizzare, quindi, dobbiamo ridefinire il metodo che usa Java per dire al Graphics di agire. Questo metodo si chiama paint() e, guarda caso, prende proprio un parametro di tipo Graphics.
    Questa è la firma del metodo:
    codice:
    public void paint(Graphics g)
    Ridefinendo questo metodo, quindi, possiamo andare a manipolare il modo in cui verrà ridisegnato il componente che a noi interessa (nel tuo caso, il pannello o la finestra dove vuoi che venga disegnata l'immagine).

    L'oggetto Graphics possiede un metodo apposito per fare in modo che sul componente venga disegnata un'immagine: il metodo si chiama drawImage() e vuole un po' di parametri per sapere come, dove e che immagine disegnare.

    L'elenco delle firme di quel metodo le trovi nella documentazione che ti ho linkato.
    Quella più espressiva, comunque, utilizza questa serie di parametri:
    codice:
    public void drawImage(Image img, int posX, int posY, int width, int height, ImageObserver obs)
    
    img: l'immagine da disegnare sulla superficie del componente
    
    posX: la posizione orizzontale dell'angolo superiore sinistro
          da cui cominciare a disegnare l'immagine
    
    posY: la posizione verticale dell'angolo superiore sinistro
          da cui cominciare a disegnare l'immagine
    
    width: larghezza dell'immagine
    
    height: altezza dell'immagine
    
    obs: il componente che sarà responsabile dell'immagine.
    Quindi, per poter disegnare un'immagine di sfondo, è necessario ridefinire il metodo paint() (che è il metodo chiamato da Java ogni volta che è necessario ridisegnare il componente) e utilizzare i metodi dell'oggetto Graphics che gli viene passato, in modo che vada effettivamente a disegnare l'immagine che vogliamo, come vogliamo.

    Vediamo, quindi, l'esempio (uguale a quelli postati sopra):
    codice:
    public class MiaFinestra extends Frame {
       ...
       private Image mioSfondo;
       ...
       public void paint(Graphics g) {
          g.drawImage(mioSfondo, 0, 0, mioSfonto.getWidth(this), mioSfondo.getHeight(this), this);
       }
    }
    Spero di esserti stato utile.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #12
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193
    Lele grazie mille per la spiegazione.
    Ma ho provato e ancora non ci riesco
    Posto il codice:
    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    public class Grafica extends JFrame {
    Image sfondo = new Image("euro.gif");
    public void paint(Graphics g) {
          g.drawImage(sfondo, 0, 0, sfondo.getWidth(this), sfondo.getHeight(this), this);
       }
    
    Grafica() {
    super();
    setTitle("Cod_fisc");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Dimension finestra = getToolkit().getScreenSize();
    int larghezzaMonitor = finestra.width;
    int altezzaMonitor = finestra.height;
    int posX = (larghezzaMonitor - 500) / 2;
    int posY = (altezzaMonitor - 500) / 2;
    setPreferredSize(new Dimension(500, 500));
    setLocation(posX, posY);
    setIconImage(Toolkit.getDefaultToolkit().createImage(Grafica.class.getResource("icona.gif")));
    paint(sfondo);
    pack();
    setVisible(true);
    }
    public static void main(String[] args) {
    Grafica frame = new Grafica();
    }
    }
    Cosa sbaglio

  3. #13
    Prima di tutto Image è astratta quindi non puoi istanziare oggetti di questa classe...creati un ImageIcon per contenere l'immagine.
    Secondo al metodo paint dai come parametro un oggetto di tipo Graphics e poi quando lo richiami passi un oggetto di tipo Image...già qui mi capirai che qualcosa non torna!
    Io suggerirei di fare come nell'esempio del link sopra cioè:

    codice:
    Image immagine;
    ImageIcon sfondo;
    
    sfondo = new ImageIcon("bello.jpg");
    JPanel panel = new JPanel()
    {
        protected void paint(Graphics g)
        {
            g.drawImage(sfondo, 0, 0, sfondo.getWidth(this), sfondo.getHeight(this), this);  //facendo diventare sfondo di ImageIcon e non Image come ti ho detto prima.
            super.paint(g);
        )
    };

    Poi semplicemente aggiungi il tuo JPanel appena creata al JFrame.
    Tutto questo lo devi fare dentro al costruttore della tua classe che estende JFrame e ricordati che i costruttori vanno SEMPRE dichiarati PUBLIC

    codice:
    public Grafica() {
    ...
    }
    e non

    codice:
    Grafica() {
    ...
    }
    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  4. #14
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Esatto... il metodo paint() non va richiamato esplicitamente, ma utilizzando il metodo repaint() che non prende parametri: sarà Java a richiamare correttamente il metodo paint().


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #15
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193
    Originariamente inviato da LeleFT
    Esatto... il metodo paint() non va richiamato esplicitamente, ma utilizzando il metodo repaint() che non prende parametri: sarà Java a richiamare correttamente il metodo paint().


    Ciao.
    Quindi quando voglio far disegnare a java basta che scrivo
    repaint();
    giusto???? :master:

    (Scusatemi per le troppe domande che sto ponendo ma è il mio primo programma )

  6. #16
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Esatto... quando devi fare il cosiddetto "refresh", basta che chiami il metodo repaint().


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #17
    forse lui intendeva disegnare in generale :master:

    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  8. #18
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193
    Ragazzi lo so che chiedo troppo ma non ci sono ancora riuscito . Non avete un codice sorgente che mette come sfondo una immagine??

    Grazie

  9. #19
    scusa come ti ha scritto lele eccolo:

    codice:
    public class MiaFinestra extends Frame {
       ...
       private Image mioSfondo;
       ...
       public void paint(Graphics g) {
          g.drawImage(mioSfondo, 0, 0, mioSfonto.getWidth(this), mioSfondo.getHeight(this), this);
       }
    }
    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  10. #20
    Utente di HTML.it L'avatar di HaCk88
    Registrato dal
    May 2005
    Messaggi
    193
    Ancora niente

    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.Image.*;
    import java.awt.event.*;
    public class Grafica extends JFrame {
    Grafica() {
    sfondo = new ImageIcon("bello.jpg");
    JPanel panel = new JPanel();
    ImageIcon sfondo;
    public void paint(Graphics g) {
          g.drawImage(sfondo, 0, 0, sfondo.getWidth(this), sfondo.getHeight(this), this);
       }
       super();
    setTitle("Cod_fisc");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Dimension finestra = getToolkit().getScreenSize();
    int larghezzaMonitor = finestra.width;
    int altezzaMonitor = finestra.height;
    int posX = (larghezzaMonitor - 500) / 2;
    int posY = (altezzaMonitor - 500) / 2;
    setPreferredSize(new Dimension(500, 500));
    setLocation(posX, posY);
    setIconImage(Toolkit.getDefaultToolkit().createImage(Grafica.class.getResource("icona.gif")));
    pack();
    setVisible(true);
    }
    public static void main(String[] args) {
    Grafica frame = new Grafica();
    }
    }
    Ma cosa sbaglio Mi da ancora errore

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.