Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    33

    Domanda da principiante su una funzione

    Ciao a tutti, sto seguendo una guida su Java e giunto all' ultimo capitolo pensavo di aver capito quasi tutto quando mi si presenta questo codice:
    codice:
    import java.awt.Color;
    import java.awt.Graphics;
    import javax.swing.JFrame;
    public class GraphicsDemo extends JFrame{ 
    	   public GraphicsDemo(){
    		   setTitle("GraphicsDemo with Kilobolt");
    		   setSize(800,480);
    		   setVisible(true);
    		   setDefaultCloseOperation(EXIT_ON_CLOSE);
    		}
    	   public void paint(Graphics r){
    		    r.setColor(Color.YELLOW);
    		    r.fillRect(0,0,800,480);
    		    r.setColor(Color.BLUE);
    		    r.drawRect(0, 0, 100, 250);
    		    r.drawRect(0, 0, 102, 252);    
    		    r.setColor(Color.DARK_GRAY);
    		    r.drawRect(0, 0, 104, 254);
    		    r.drawString("CIAO", 10, 45);
    		 }
        public static void main(String args[]){
          GraphicsDemo demo = new GraphicsDemo();
        }
    }
    Dunque quello che ho capito è che si importano 3 classi (o pacchetti ?), quali Color, JFrame e Graphics. Si crea una classe "GraphicsDemo" nel quale c' è un metodo per la creazione di una finestra 800x480. Poi c' è il classico metodo main nel quale si dichiara un nuovo oggetto che è del tipo GraphicsDemo (quindi ha tutti gli attributi e i metodi della classe) e poi c' è la dichiarazione di un metodo che non ho ben capito come funziona, ossia quel "public void paint(Graphics r){...}". Allora da quello che sono riuscito a capire è che si crea un oggetto "r" che fa parte della classe Graphics, ma il metodo paint come funziona? da dove lo prendo? com' è possibile che Java capisce che tutto quello che disegno in "r" va a finire nella finestra realizzata con "public GraphicsDemo(){...}" ? Scusate se è una domanda forse banale, ma davvero non la capisco, e il tutorial è in inglese quindi forse non ho ben capito io ed è più semplice di quello che appare. Grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Domanda da principiante su una funzione

    Originariamente inviato da barrux
    Dunque quello che ho capito è che si importano 3 classi (o pacchetti ?), quali Color, JFrame e Graphics.
    Sì, viene fatto un import ("single type import") di 3 classi.

    Originariamente inviato da barrux
    Si crea una classe "GraphicsDemo" nel quale c' è un metodo per la creazione di una finestra 800x480. Poi c' è il classico metodo main nel quale si dichiara un nuovo oggetto che è del tipo GraphicsDemo (quindi ha tutti gli attributi e i metodi della classe)


    Originariamente inviato da barrux
    ma il metodo paint come funziona? da dove lo prendo? com' è possibile che Java capisce che tutto quello che disegno in "r" va a finire nella finestra realizzata con "public GraphicsDemo(){...}" ?
    Tutti i componenti "grafici" hanno un public void paint(Graphics) (direttamente o indirettamente se ereditato da un componente base).
    Questo è il metodo principale che sta a "monte" di tutto il painting nel componente. Non è il programmatore che lo invoca ... è il framework di Java. Quando il componente ha bisogno di essere ridisegnato, per qualunque motivo (richiesta esplicita dal programmatore o perché il componente ha cambiato stato in base ad altri eventi es. del mouse o anche più banalmente perché la finestra è stata (ri)aperta o è stata esposta, tutta o in parte), allora viene invocato il paint.

    P.S. metti nel paint un System.out.println("paint at " + System.currentTimeMillis()); poi avvia, ridimensiona la finestra con mouse/tastiera e guarda sulla console. Ad ogni piccolo ridimensionamento, il paint viene invocato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    33
    Grazie mille per la risposta, ho chiarito alcune cose, ma ancora mi risulta difficile entrare nell' ottica, penso sia normale, praticamente il metodo paint è una funzione con il quale si dice alla finestra realizzata con il GraphicsDemo i cosa deve contenere (rettangoli, ecc) e si aggiorna automaticamente quando questa finestra viene modificata. Il funzionamento di paint è del tutto nascosto e si trova all' interno della classe Graphics. Quindi quel "Graphics r", dentro le parentesi del paint, vorrebbe dire semplicemente che creo un insieme di informazioni che vanno ad agire nel paint, come la creazione di un rettangolo, ecc.. Ho capito bene ? Grazie ancora.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da barrux
    Quindi quel "Graphics r", dentro le parentesi del paint, vorrebbe dire semplicemente che creo un insieme di informazioni che vanno ad agire nel paint, come la creazione di un rettangolo, ecc.. Ho capito bene ? Grazie ancora.
    Chi invoca il paint (il framework) semplicemente passa una implementazione specifica di Graphics che offre tutti i metodi per disegnare sulla superficie del componente. Graphics(2D) rappresenta un "contesto" di disegno. Un Graphics può servire per disegnare su un componente grafico, su una immagine off-screen o ad esempio su una pagina da inviare ad una stampante hardware. Per ogni caso, è il framework che ti fornirà un contesto differente, ovvero una implementazione diversa del Graphics(2D).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.