Chiarimenti iniziali su Applet Java

di il
3 risposte

Chiarimenti iniziali su Applet Java

Scusate la banalità eventualmente dei quesiti posti ma sono alle prime armi con gli applet ed in genere con il linguaggio Java.
Ho studiato la teoria di Java e ci sono alcune cose che non mi tornano nei codici degli applet.
Ad esempio prendiamo questo codice:

import java.applet.Applet;
import java.awt.*;

public class prova extends Applet {
public void paint(Graphics g) {
int cx = getSize().width/2, cy = getSize().height/2;
int x = cy, y = cy, d = 16;
for(int i=0;i<40;i++)
{
g.drawLine(cx+x,cy+y,cx-y,cy+x);
g.drawLine(cx-y,cy+x,cx-x,cy-y);
g.drawLine(cx-x,cy-y,cx+y,cy-x);
g.drawLine(cx+y,cy-x,cx+x,cy+y);
int tmp = -(y+x)/d;
y += (x-y)/d;
x += tmp;
}
}
}


Le prime due righe dovrebbero servire ad importare i package che ci servono per creare l’Applet (?)
Il primo package è quello proprio degli applet, il secondo è quello delle interfacce

Poi c'è la dichiarazione della classe dell’applet che vogliamo creare che estende la classe Applet.
Quindi all’interno di questa classe il metodo paint con parametro Graphics g.
Adesso non capisco il "." Cosa sta a significare nella scritta getSize().width/2? Cioè stiamo applicando getsize senza parametri alla variabile width? Ma la variabile width non è stata dichiarata precedentemente?
Poi, successivamente, non capisco nemmeno la riga g.drawline (cx+x, cy+y, cx-y,cy+x).
Cioè il metodo drawline applicato all’oggetto g? Ed i parametri stanno per le coordinate dei punti da unire con la linea?

3 Risposte

  • Re: Chiarimenti iniziali su Applet Java

    alb79 ha scritto:


    Adesso non capisco il "." Cosa sta a significare nella scritta getSize().width/2? Cioè stiamo applicando getsize senza parametri alla variabile width? Ma la variabile width non è stata dichiarata precedentemente?
    Con la riga
    int cx = getSize().width/2, cy = getSize().height/2;
    tu di fatto fai queste due cose:
    
    int cx = getSize().width/2;
    int cy = getSize().height/2;
    
    Quello che succede con la prima riga è che tu invochi il metodo "getSize". Ma su quale oggetto lo invochi, visto che non ne specifichi nessuno? la risposta è che l'oggetto target di questa invocazione è this, ovvero l'oggetto corrente (nello specifico l'istanza della tua classe che estende Applet). Di conseguenza la prima riga equivale a
    int cx = this.getSize().width/2;
    . Per cui alla fine cx conterrà al suo interno un valore intero pari alla metà della larghezza del tuo applet. La riga successiva farà lo stesso per quanto riguarda l'altezza.
    non capisco nemmeno la riga g.drawline (cx+x, cy+y, cx-y,cy+x).
    Cioè il metodo drawline applicato all’oggetto g? Ed i parametri stanno per le coordinate dei punti da unire con la linea?
    Per conoscere la risposta a questa domanda devi consultare le API Java, in particolare riguardo al metodo drawLine della classe Graphics: vedi
  • Re: Chiarimenti iniziali su Applet Java

    Ti ringrazio per la tua risposta.

    Però non mi è chiara ancora una cosa.

    g.drawline ad esempio che vuol dire?

    Cioè è l'oggetto che si ottiene applicando il metodo drawline sul grafico g?
    Più in generale un simbolo seguito da un punto e poi da un metodo vuol sta a significare l'oggetto che si ottiene applicando quel metodo all'oggetto rappresentato dal simbolo.
    Faccio un esempio.


    Supponiamo di avere un oggetto A ed un metodo B

    Allora A.B(P1,P2,----PN)dove A sta a significare un oggetto e B un metodo significa l'oggetto che si ottiene facendo agire il metodo B sull'oggetto A passandogli i parametri P1,P2,...PN?
    Ma io ho letto che i metodi in genere non agiscono su oggetti ma fanno delle operazioni creando eventualmente degli oggetti che si memorizzano nello heap. Ma non gli si dà nessun oggetto come argomento ma sol parametri. Com'è possibile che alcuni metodi tipo drawline agiscano su oggetti precedentemente creati o comunque dati, tipo la finestra grafica g dell'applet.
    Chiedo scusa ancora una volta per l'eventuale banalità della domanda e delle considerazioni a corollario della stessa.

    Grazie.

    Ciao.
  • Re: Chiarimenti iniziali su Applet Java

    g.drawline ad esempio che vuol dire?
    Significa invocare il metodo "drawLine" (con i relativi parametri) sull'oggetto g, istanza della classe Graphics.

    Per vedere cosa fa questo metodo devi leggerti le relative API, e puoi scoprire che nello specifico il metodo "drawLine(x1,y1,x2,y2)" è di tipo "void", per cui non restituisce nessun oggetto, e si occupa di disegnare una linea che parte dal punto (x1, y1) e arriva al punto (x2, y2).
    Più in generale un simbolo seguito da un punto e poi da un metodo vuol sta a significare l'oggetto che si ottiene applicando quel metodo all'oggetto rappresentato dal simbolo.
    Questa cosa è, in generale, sbagliata perché non è detto che tutti i metodi restituiscano degli oggetti. In generale una cosa del tipo "nomeVariabile.nomeMetodo(eventualiParametri);" significa: "applica il metodo nomeMetodo sull'oggetto nomeVariabile.
    Supponiamo di avere un oggetto A ed un metodo B
    ...
    Ma io ho letto che i metodi in genere non agiscono su oggetti ma fanno delle operazioni creando eventualmente degli oggetti che si memorizzano nello heap
    Questo è, in generale, sbagliato. Per farti un esempio:
    
    public class Contatore {
       private int stato;
    
       public void incrementa(){
          stato++;
       }
    }
    
    ...
    
    public static void main(String args){
       Contatore c = new Contatore();
       c.incrementa();
    }
    
    Quando io eseguo "incrementa" non creo un nuovo oggetto, ma vado ad agire sull'oggetto che ho creato precedentemente.
    Per vedere la semantica di un metodo devi leggerti il codice sorgente oppure fidarti di ciò che le API dicono.
Devi accedere o registrarti per scrivere nel forum
3 risposte