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