Newsgroup: it.comp.java
Titolo: Chiamare un metodo

Ciao a tutti, 
ho questo strano dubbio.
Sono neofita di java e avevo capito che un metodo, all'interno di una classe, per essere eseguito doveva venire
esplicitamente nominato(chiamato), all'interno della classe stessa.
Oppure da un'altra classe dopo avere istanziato la sua classe di appartenenza.
Ho questo codice (che funziona) e non ho capito perchč venga eseguito il metodo -paint- senza che vi sia un riferimento
esplicito!
Questo significa che inavvertitamente posso creare dei metodi che vengono eseguiti semplicemente richiamando il metodo
costruttore della classe ???
Grazie,
Sandro
Il programma crea un frame e al suo interno disegna 2 linee con il metodo paint.
................ etc. 
        CreaGraf graf = new CreaGraf();
................ etc. 
class CreaGraf extends JFrame
{
        public CreaGraf()       
        {
                ................ etc. 
                // prende le dimensioni dello schermo
                Toolkit kit = Toolkit.getDefaultToolkit();
                Dimension screenSize = kit.getScreenSize();
                int screenHeight = screenSize.height;
                int screenWidth = screenSize.width;
                // centra il frame nello schermo
                setSize(screenWidth/2, screenHeight/2);
                setLocation(screenWidth/4, screenHeight/4);
                // imposta l'icona ed il titolo del frame
                Image img = kit.getImage("borsaGraf.gif");
                setIconImage(img);
                setTitle(codTitolo);
        }
        public void paint (Graphics g)
        {
                Graphics2D g2d = (Graphics2D) g;
 
                g2d.setPaint(Color.red);  
                g2d.draw(new Line2D.Double(395, 30, 320, 150)); 
                float trat[] = {10};  
                g2d.setStroke(new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 10, trat, 0));
                g2d.draw(new Line2D.Double(320, 30, 395, 150)); 
        }       
 
................ etc.
}
 


Non ho ben capito... vuoi dire che se crei un oggetto si possono 
eseguire dei suoi metodi? Chiaramente si, se nel costruttore li usi, 
java li esegue!
class Paperino {
   public Paperino() {
     qui();
     quo();
     qua();
   }
...
}
quando lanci p = new Paperino(); vengono eseguiti i suoi metodi qui() 
quo() e qua().
Non so se  ho capito bene il tuo dubbio, però
bye
DKano

 esplicito!
Probabilmente il metodo paint viene chiamato dal metodo setSize o
setLocation o ...
-- 
Giambo - Occhio al filtro antispam _e_ alla whitelist !

 DKano
Questa non la sapevo, però il mio caso è un pò diverso:
class Paperino {
    public Paperino() {
            qui()
            quo();
            qua();
    }
    public Pluto(){..};
 ...
 }
quando lanci p = new Paperino(); dovrebbe essere eseguito 
solo il suo metodo costruttore, quindi  Paperino() e non Pluto() !
Nel mio caso invece mi esegue anche Pluto()  (!?)
Ciao,
Sandro

 Ho questo codice (che funziona) e non ho capito perchè venga eseguito il metodo -paint- senza che vi sia un riferimento

penso che dipenda dal fatto che stai estendendo una classe JFRAME
e quando istanzi il tuo oggetto, esso deve "sapere" come disegnarsi a 
video, e lo fa eseguendo le istruzioni che hai messo nel metodo paint
che viene chiamato automaticamente x disegnare il controllo.
{2Nd+BESt}

 costruttore della classe ???
Assolutamente no. Nella chiamata del costruttore non viene chiamato 
"inavvertitamente" nulla.
Esamina con attenzione il tuo caso.
Il metodo paint() nasconde il metodo omonimo della classe che estendi. 
All'interno del constructor tu chiami svariati metodi della classe 
JFrame, uno di questi richiama il metodo paint().
Se tu rinomini il metodo in paint_cippirimierlo() vedrai che non lo 
chiama nessuno.

 {2Nd+BESt}
Grazie, siete stati molto chiari.
Sandro

 Questa non la sapevo, però il mio caso è un pò diverso:
Scusa, la frase non era ironica, avevo capito che qui()quo()qua() fossero 3 metodi
definiti all'interno del metodo Paperino(), e non le loro chiamate...solo adesso me ne sono accorto !
Ciao,
Sandro

 Sandro
Forse ho capito, tu vuoi dire che viene eseguito il metodo paint() ?
In questo caso, credo che il metodo venga eseguito dal JFrame... prova a 
guardare la documentazione di paint() non sono molto pratico della cosa.
In ogni caso, o il tuo costruttore o uno richiamato (implicitamente o 
esplicitamente) dalle classi 'superiori' devono chiamare il metodo 
perché questo venga eseguito, non ci sono metodi che si richiamano da soli.
bye
DKano