IGEA
Esercitazione in laboratorio del 2 maggio 2005
Contenuto
1. Colori in Java
2. Ampiezza penna
3. Finestre di dialogo
4. Disegno di figure geometriche
5. Esercitazione pratica
Uso dei colori
Si basa sulla classe java.awt.Color. Ogni oggetto della classe Color identifica un preciso
colore, definito al momento della sua istanziazione. In particolare, è possibile definire un
colore specificando la quantità di colori fondamentali (RGB, red, green, blue) che esso
contiene; la quantità di colore viene espressa o mediante un intero (0 – 255) o mediante
un float (0 – 1). Così new Color (0, 255, 0) crea un oggetto associato al colore verde
(massima intensità), mentre new Color(255, 255, 255) crea un oggetto associato al
colore bianco (massima intensità di ciascuna dei tre colori fondamentali). Il costruttore è
sovraccarico e può accettare anche un quarto parametro, denominato parametro alpha,
che specifica il livello di trasparenza del colore, espresso mediante un intero (0 – 255, 255
= min trasparenza) o mediante un float (0 – 1, 1 = min trasparenza). Esempi:
new Color(0, 255, 0)
new Color(255, 0, 0,
128)
La loro sovrapposizione (secondo colore sopra al primo) è di seguito illustrata:
Per usare i colori più diffusi non è necessario istanziare la classe Color, poiché sono già
definite varie costanti
static
static
static
static
static
static
static
Color
Color
Color
Color
Color
Color
Color
BLACK
BLUE
CYAN
DARK_GRAY
GRAY
GREEN
LIGHT_GRAY
static
static
static
static
static
static
Color
Color
Color
Color
Color
Color
MAGENTA
ORANGE
PINK
RED
WHITE
YELLOW
La classe definisce anche corrispondenti costanti con identificatori completamente
minuscoli (black, blue, cyan ecc.).
Per cambiare colore usato in grafica si può usare il metodo setColor(<colore>) della
classe Grahics2D: ad esempio, se g2D è un riferimento a un oggetto Graphics2D,
g2D.setColor(Color.PINK) farà usare, nelle successive operazioni grafiche, una penna di
colore rosa.
Definizione dell’ampiezza della penna
Per modificare l’ampiezza della penna si può usare il metodo setStroke(<oggetto
BasicStroke>) della classe java.awt.Graphics2D, come nell’esempio illustrato.
import java.awt.BasicStroke;
…
g2D.setColor(Color.PINK);
g2D.draw(r4);
g2D.setStroke(new BasicStroke((float)3.5));
g2D.draw(r5);
In particolare, new BasicStroke((float)3.5) crea un oggetto che specifica un tratto di
penna ampio 3.5 pixel (si noti che il costruttore di BasicStroke richiede un parametro
float e non double).
Dialogo con l’utente tramite JOptionPane
La classe javax.swing.JOptionPane mette a disposizione dei metodi per il dialogo con
l’utente tramite una apposita finestra. In particolare, il metodo static String
showInputDialog(<stringa>) mostra all’utente una finestra con il messaggio specificato
da <stringa>, consentendogli di specificare un input, restituito come stringa dal metodo
stesso. Altri metodi: showConfirmDialog(…) per porre una domanda all’utente, con risposta
del tipo yes/no/cancel, e showMessageDialog(…) per notificare informazioni all’utente.
L’input ottenuto tramite showInputDialog può essere trasformato in numeri tramite i metodi
static int Integer.parseInt(<stringa>) e static int
Double.parseDouble(<stringa>). Nel caso l’utente debba fornire più input (ad esempio
una coppia di numeri) è possibile consentire all’utente di scriverli in un’unica stringa,
separati da spazi, sfruttando i servizi della classe java.util.StringTokenizer per
ricavare le singole componenti (sottostringhe) della stringa di input.
Schema di uso:
StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens())
System.out.println(st.nextToken());
visualizza l’output seguente:
this
is
a
test
Disegno di figure geometriche
Per disegnare figure geometriche come rettangoli ed ellissi usare il metodo draw(…) o
fill(…) della classe Graphics2D. Ad esempio, se g2D è un riferimento a un oggetto
Graphics2D, si può invocare g2D.draw(new Rectangle2D.Double(x, y, w, h)), con ovvio
significato dei parametri.
Per costruire figure geometriche sono disponibili le seguenti classi (elenco parziale):
nome classe
Rectangle2D.Double
import
java.awt.geom.Rectangle2D
descrizione
rettangolo isotetico
Ellipse2D.Double
java.awt.geom.Ellipse2D
ellisse ad assi
isotetici
QuadCurve2D.Double
java.awt.geom.QuadCurve2D
segmento di curva
parametri costruttore
x, y, width, height
il rettangolo isotetico
circoscrivente (x, y,
width, height)
x1, y1, ctrlx,
Line2D.Double
java.awt.geom.Line2D
quadratica che si
estende da (x1, y1)
a (x2, y2), avente
punto di controllo
(ctrlx, ctrly)
segmento di linea
ctrly, x2, y2
x1, y1, x2, y2
Esercitazione pratica
Scrivere un’applet che consenta all’utente di confrontare visivamente due colori, definiti
attraverso le loro componenti RGB e α (trasparenza).
L’applet chiede all’utente, attraverso una finestra di dialogo, di inserire i quattro parametri
di ciascuno dei due colori da confrontare. Quindi, vengono mostrati due rettangoli pieni,
parzialmente sovrapposti, riempiti con i due colori specificati dall’utente.
Lo schema dell’applet cui occorre ispirarsi è illustrato in figura. In particolare, si consiglia di
inserire nel metodo init la logica necessaria per acquisire informazioni sui colori e per
creare i due rettangoli specificati e in paint quella per la loro visualizzazione. Le variabili di
classe/istanza possono essere utili per memorizzare le informazioni sui colori e sui due
rettangoli da visualizzare.