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 Color BLACK

static Color BLUE

static Color CYAN

static Color DARK_GRAY

static Color GRAY

static Color GREEN

static Color LIGHT_GRAY

static Color MAGENTA

static Color ORANGE

static Color PINK

static Color RED

static Color WHITE

static Color 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

import

descrizione

parametri costruttore

Rectangle2D.Double

java.awt.geom.Rectangle2D

rettangolo isotetico

x, y, width, height

Ellipse2D.Double

java.awt.geom.Ellipse2D

ellisse ad assi isotetici

il rettangolo isotetico circoscrivente (x, y, width, height)

QuadCurve2D.Double

java.awt.geom.QuadCurve2D

segmento di curva quadratica che si estende da (x1, y1) a (x2, y2), avente punto di controllo (ctrlx, ctrly)

x1, y1, ctrlx, ctrly, x2, y2

Line2D.Double

java.awt.geom.Line2D

segmento di linea

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.