Post on 01-May-2015
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 8 1
Gestione dei colori
La gestione dei colori in AWT consente di specificare un qualunque colore. Il sistema trova la migliore corrispondenza entro i limiti del dispositivo hardware automaticamente
Le caratteristiche di un colore sono incapsulate nella classe Color, che fornisce una gamma di metodi per creare e manipolare colori RGB e HSB
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 8 2
Gestione dei colori (esempio)
import java.awt.*;
public class Colori extends Frame { public void paint (Graphics g) {
Color c1 = new Color (255, 100, 100);Color c2 = new Color (100, 255, 100);g.setColor(c1);g.drawLine(20, 15, 50, 70);g.setColor(c2);g.fillRect(40, 35, 50, 20);
}}
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 8 3
Gestione dei font
L’AWT supporta diversi tipi di caratteri (font).
Le caratteristiche di un font sono incapsulate in Font, che fornisce una gamma di metodi per creare e manipolare fonts. Inoltre AWT definisce la Classe FontMetrics per gestire informazioni legate ad oggetti di tipo Font
import java.awt.*;
public class Scritte extends Frame { public void paint (Graphics g) {
Font carat = new Font (“Times”, Font.BOLD, 12);g.setFont(carat);g.drawString(“Compare questa scritta”, 50, 70);
}}
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 8 4
FontMetrics
Testo che appare(10, 20)
ascendente
discendente
rigo di basealtezza
risultato di drawString(“Testo che appare”, 10, 20)
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 8 5
FontMetrics
import java.awt.*;
public class ScritteCentrate extends Frame { public void paint (Graphics g) { dimension d = this.size( ); g.setColor(Color.white); g.fillRect(0, 0, d.width, d.height); g.setColor(Color.black); g.setFont(new Font(“Helvetica”, Font.bold, 18)); drawCenteredString(“Testo centrato”, d.width, d.height, g); } public void drawCenteredString(String s, int w, int h, Graphics g) { FontMetrics fm = g.getFontMetrics( ); int x = (w - fm.StringWidth(s))/2; int y = fm.getAscent( ) + (h - fm.getAscent( ) - fm.getDescent( ))/2; g.drawString(s, x, y); } }
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 8 6
Il sistema degli eventi
Disegnare oggetti grafici all’interno di finestre è solo una parte della faccenda. Per realizzare un’interfaccia grafica interattiva è necessario gestire la comunicazione utente/applicazione
In JAVA ogni azione dell’utente attraverso l’uso del mouse e della tastiera genera un evento, che è in effetti un oggetto che porta informazioni sul tipo di evento generato e che viene utilizzato dal codice scritto per gestire quel tipo di evento
sorgente di un evento: l’oggetto che lo genera (es., bottoni, menù)
listener di un evento: l’oggetto che risponde all’evento
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 8 7
Source e listener
Sorgentedi eventi
Listenerdi eventi
Produce eventi e li invia aglioggetti che si sono registratinella sua lista di listener
Si registra nella lista della sorgente di eventi cui è interessato, e ricevel’evento quando esso è generato
evento
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 8 8
Esempio di gestione degli eventiimport java.awt.*;import java.awt.event.*;
class FrameEventi extends Frame implements ActionListener {private int clic;private Button bott;private Label lab;
FrameEventi(String s) { super(s); clic = 0; bott = new Button(“Premere qui”); lab = new Label(“Inizio”); bott.addActionListener(this); add(bott); add(lab);}
public void actionPerformed(ActionEvent a) { clic++; lab.setText(“ “ + clic);}
}
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 8 9
Classi di eventi in java.awt.event
• ActionEvent associati a bottoni, liste, menù, campi di testo
• AdjustmentEvent associati a barre di scorrimento
• ItemEvent associati a scelte in checkbox e liste
• TextEvent associati a testi in campi di testo
• ComponentEvent associati a spostamenti o dimensionamenti di componenti
• KeyEvent associati alla pressione o al rilascio di tasti
• MouseEvent associati allo spostamento del mouse e al cliccare
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 8 10
Interfacce Listener
CLASSE DI EVENTI LISTENER INTERFACE METODI LISTENER
ComponentEvent ComponentListener componentHidden()componentMoved()componentResized()
KeyEvent KeyListener keyPressed( )keyReleased( )keyTyped( )
MouseEvent MouseListenerMouseMotionListener
mouseClicked( )mousePressed( )mouseMoved( )
WindowEvent WindowListener windowActivated( )windowClosed( )windowIconified( )
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 8 11
Esempio: rispondere ad eventi del mouse import java.awt.*;import java.awt.event.*;
class FrameEventiMouse extends Frame implements MouseListener, MouseMotionListener {
private int lastX, lastY;
FrameEventiMouse( ) { this.addMouseListener(this); this.addMouseMotionListener(this);}
public void mousePressed(MouseEvent e) { lastX = e.getX( ); lastY = e.getY( );}
public void mouseDragged(MouseEvent e) { Graphics g = this.getGraphics( ); int x = e.getX( ); int y = e.getY( ); g.drawLine(lastX, lastY, x, y); lastX =x; lastY = y;}
}