Applet con disegni
Transcript
Applet con disegni
ITIS “Divini” Alessandro Benedetti Laboratorio di Informatica 4 Applet con disegni L’ area di disegno è definita nel file HTML all’interno del tag <APPLET …> con i parametri HIGHT e WIDTH. Consiste in un rettangolo, le cui dimensioni sono espresse in (0,0) pixel. L’angolo in alto a sinistra ha coordinate 0,0. Procedendo verso il basso si incrementa l’altezza (HIGHT), procedendo verso destra si incrementa la larghezza (WIDTH). I punti dell’area, cioè i pixel, vengono individuati da una coppia di interi positivi. All’interno dell’applet, per definire il contenuto del disegno (w-1,h-1) è necessario ridefinire il metodo paint. Il metodo paint è un metodo della classe Component, sopraclasse della classe Applet, che lo eredita. Ridefinendo il metodo paint si decide che cosa deve essere visualizzato. Il metodo paint ha come argomento un’istanza della classe Graphics, del package java.awt. L’istanza passata come parametro (nell’esempio qui sotto si chiama g) rappresenta il contesto grafico, cioè le informazioni relative p. es. al colore dello sfondo, al font corrente, ecc. public void paint (Graphics g) { // metodi per definire il contenuto del rettangolo } Per esempio, l’applet per scrivere una frase è import java.awt.*; import java.applet.*; public class ciaoMondo extends Applet { public void paint(Graphics g) { g.drawString("Ciao mondo !",10,10); } } Qui si è usato il metodo drawString() della classe Graphics, il cui prototipo è: void drawString(String str, int x, int y) che scrive la stringa str a partire dal pixel di coordinate (x,y). Il package java.awt, oltre alla classe Graphics, ha anche altre classi utili per la grafica, come Color e Font. Classe Color La classe Color permette di creare dei colori. Il prototipo usualmente utilizzato per creare un colore è: Color(int r, int g, int b) dove i valori di r, g, b indicano rispettivamente la quantità di rosso (red), verde (green) e blu con un numero tra 0 e 255. settembre 2008 pag. 1/4 ITIS “Divini” Alessandro Benedetti Laboratorio di Informatica 4 L’istruzione per definire un colore è per esempio Color mioColore = new Color(100,100,100); Nella classe Color sono già definite le seguenti costanti per i principali colori Rosso 0 0 0 128 64 192 0 255 255 255 255 255 255 Color.black Color.blue Color.cyan Color.gray Color.darkGray Color.lightGray Color.green Color.magenta Color.orange Color.pink Color.red Color.white Color.yellow Verde 0 0 255 128 64 192 255 0 200 175 0 255 255 Blu 0 255 255 128 64 192 0 255 0 175 0 255 0 Per cambiare i colori di default, si possono usare i metodi di Component void setBackground(Color c) : void setForeground(Color c) : cambia il colore dello sfondo cambia il colore di primo piano Classe Font La classe Font permette di definire il carattere che si intende usare per le stringhe, lo stile e la dimensione. Il prototipo è Font(String name, int Style, int Size) Il nome del font è definito tra i seguenti valori: Serif SansSerif Monospaced Dialog DialogInput Con “grazie” Senza “grazie” A spaziatura fissa Utile per le etichette Utile per l’input dell’utente oppure con il nome di un font standard come • TimesRoman • Arial • Courier • … Lo stile è definito tramite le costanti: Font.PLAIN Font.BOLD Font.ITALIC Font.BOLD+ Font.ITALIC Normale Grassetto Corsivo Grassetto+corsivo settembre 2008 pag. 2/4 ITIS “Divini” Alessandro Benedetti Laboratorio di Informatica 4 L’istruzione per definire il font da usare è del tipo: Font mioFont = new Font(“TimesRoman”,Font.ITALIC,24); Poi si può usare il metodo setFont() della classe Graphics per impostare un font. Esempio g.setFont(mioFont); Si può anche procedere con un’unica istruzione: g.setFont(new Font(“TimesRoman”, Font.ITALIC,24)); Metodi della classe Graphics per disegnare figure La classe Graphics ha un metodo per disegnare alcune figure base: void drawLine(int x1, int y1, int x2, int y2) disegna un segmento dal pixel di coordinate (x1, y1) al pixel di coordinate (x2,y2). void drawRect(int x, int y, int w, int h) disegna un rettangolo di cui sono fornite le coordinate dello spigolo alto a sinistra (x,y), l’ampiezza w e l’altezza h. void drawOval(int x, int y, int w, int h) disegna un ovale racchiuso in un rettangolo di cui sono fornite le coordinate dello spigolo alto a sinistra (x,y), l’ampiezza w e l’altezza h. void drawPolygon(int[] x, int[] y, int npoints) disegna un poligono specificando le ascisse e le coordinate dei vertici rispettivamente nei vettori x e y; npoints rappresenta il numero dei vertici. void drawArc(int x, int y, int w, int h, int ai, int a) disegna un arco; x, y, w, h hanno lo stesso significato che in drawRect. Il parametro ai indica l’angolo da cui inizia l’arco e il parametro a indica l’ampiezza dell’arco. Gli archi sono misurati in gradi (0°-360°); lo zero è posto sull’asse delle ascisse e la misura è in senso antiorario. Per disegnare le figure piene sono disponibili i seguenti metodi, con gli stessi parametri dei metodi descritti precedentemente: void fillRect(int x, int y, int w, int h) disegna un rettangolo pieno. void fillOval(int x, int y, int w, int h) disegna un ovale pieno. void fillPolygon(int[] x, int[] y, int npoints) disegna un poligono pieno. Le dimensioni dell’area di disegno La classe Component possiede anche metodi per conoscere le dimensioni dell’area riservata dai parametri HIGHT e WIDTH del tag APPLET: settembre 2008 pag. 3/4 ITIS “Divini” Alessandro Benedetti int getWidth() : restituisce la larghezza come intero int getHight() : restituisce l’altezza come intero Dimension getSize(): restituisce un oggetto Dimension Laboratorio di Informatica 4 contenente le dimensioni della classe Component Esempi di codice: int w = getWidth(); int h = getHight(); oppure int w = getSize().width; int h = getSize().hight; La classe Image Il package awt contiene anche la classe Image, che permette di trattare immagini in formato .gif, .jpeg o .png, sotto forma di rettangoli. Per caricare un immagine in un’applet si usa il metodo getImage, metodo della classe Applet. La sintassi per caricare l’immagine foto.gif, allocata nella stessa cartella dell’applet è del tipo: Image img = getImage(getDocumentBase(),”foto.gif”) Di solito il metodo getImage() è richiamato all’interno del metodo init() dell’applet. Per disegnare l’immagine si usa il metodo drawImage() della classe Graphics. Questo metodo ha diversi prototipi; i più diffusi sono: boolean drawImage(Image img, int x, int y, context) dove img è l’immagine precedentemente ottenuta con getImage(), x e y sono le coordinate dello spigolo in alto a sinistra dell’immagine, e context di solito è il riferimento ad un particolare oggetto che ne controlla il caricamento, che di solito assume il valore di this. Per esempio g.drawImage(img,10,20,this); disegna l’immagine foto.gif (v. sopra) a partire dal pixel di coordinate (10,20) nelle dimensioni originali dell’immagine. Se si desidera deformare l’immagine in un rettangolo arbitrario si possono introdurre altri due parametri che definiscono larghezza e altezza del rettangolo riservato all’immagine. Così g.drawImage(img,10,20,50,75, this); disegna l’immagine comprimendola nel rettangolo il cui vertice in alto a sinistra è il pixel (10,20), e ha larghezza 50 pixel e altezza 75 pixel. settembre 2008 pag. 4/4