29
Progettazione dei Sistemi Interattivi (a.a. 2004/0 5) - Lezione 7 1 Uso dell’interfaccia Runnable face Runnable { public void run ( ); interfaccia Runnable astrae il concetto di qualcosa che eseg ntre è attivo classe Thread implementa Runnable plementare Runnable è un altro modo di creare oggetti esegui ternativo all’estendere Thread – (una classe può avere una sola superclasse) robj è un oggetto Runnable, è possibile invocare il costrutto read(robj) che crea una nuova trama che usa il metodo run( )

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Embed Size (px)

Citation preview

Page 1: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 1

Uso dell’interfaccia Runnable

interface Runnable {public void run ( );

}

• L’interfaccia Runnable astrae il concetto di qualcosa che esegue codice mentre è attivo

• La classe Thread implementa Runnable

• Implementare Runnable è un altro modo di creare oggetti eseguibili,

alternativo all’estendere Thread – (una classe può avere una sola superclasse)

• Se robj è un oggetto Runnable, è possibile invocare il costruttore Thread(robj) che crea una nuova trama che usa il metodo run( ) di robj

Page 2: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 2

class RunPingPong implements Runnable {String word;int delay;

PingPong (String che_dire, int intervallo) {word = che_dire;delay = intervallo;

}

public void run ( ) {try {

for ( ; ; ) {System.out.print (word + “ “);Thread.sleep (delay);

}} catch (InterruptedException e) {

return;}

}

public static void main (String[ ] args) {Runnable ping = new RunPingPong (“ping”, 33);Runnable pong = new RunPingPong (“PONG”, 100);new Thread(ping).start();new Thread(pong).start();

}}

Page 3: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 3

Campi volatile

• Un campo il cui valore può essere modificato concorrentemente da diverse trame va dichiarato volatile per segnalare al compilatore che trame non sincronizzate possono cambiarne il contenuto

...

...volatile int currentValue;...

...currentValue = 5;

for ( ; ; ) {display.showValue(currentValue);Thread.sleep(1000);

}...

Page 4: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 4

Librerie di classi in JAVA: Packages

Un package è una collezione di classi in qualche modo correlate

• Crescita della taglia delle applicazioni MODULARITA’

• I packages aiutano a organizzare le classi in modo da raggruppare quelle affini

• Rendere tipi e componenti accessibili solamente ad un gruppo di classi

• Protezione rispetto a possibili collisioni di identificatori

Page 5: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 5

Come creare un package

package attr;

class X  {// campi e metodi

}

public class Y  {// campi e metodi

}

interface Z {// metodi

}

File sorgente: MieiSorgenti.java

Dichiarazione di package: tutto il codice scritto in MieiSorgenti.javafa parte del package attr

Le classi utilizzabili al di fuori del proprio package sono dichiarate public

Page 6: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 6

Importare un package

package altro;import attr.Y;import libreria.*;

class A  {// campi e metodi

}

public class B  {// campi e metodi

}

File sorgente: CodiceAltrui.java

Importa la classe Y del package attr

Importa tutto il package libreria

Page 7: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 7

Nomi dei package: proprietà e convenzioni

• Il nome di un package è aggiunto implicitamente come prefisso a tutti i nomi dei tipi ivi definiti

ESEMPIO

Se in codice al di fuori del package attr voglio dichiarare una variabile del tipo Y, definito in attr, ho due alternative:

1) Scrivo la dichiarazione attr.Y varY;

2) Importo la classe attr.Y con import attr.Y; e poi scrivo la dichiarazione Y varY;

• E’ utile scegliere in modo standard i nomi di packages. Ad esempio, si può usare sempre come prefisso l’inverso del proprio dominio internet: it.unisa.attr

• Se un file sorgente non ha dichiarazione di package, il suo codice fa parte del package di default “unnamed”

Page 8: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 8

Criteri per la creazione di packages

• Un package dovrebbe contenere solo classi correlate funzionalmente: tutti i membri non privati di ogni classe sono accessibili da tutte le altre classi

• Un package dovrebbe contenere gruppi di classi secondo una logica utile per chi volesse utilizzarle

• Mantenere insiemi coerenti di classi organizzate in packages aiuta a scegliere gli identificatori in modo che siano semplici e intuitivi senza correre il rischio dei conflitti

Page 9: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 9

Packages forniti dal sistema JAVA

• java.lang language foundation classes: implementano i tipi di datifondamentali

• java.io I/O class library: contiene le classi che gestiscono l’input/output a basso livello, per esempio la lettura da file

• java.awt abstract window toolkit: contiene le classi che gestiscono lainterazione con l’utente attraverso finestre, bottoni, menù, etc.

• java.util utility class library: contiene classi di utilità per gestire strutture dati quali hash tables,vettori, stack

• java.net network interface class library: contiene classi per comunicaresu rete

• java.awt.event event class library: contiene classi per la gestione degli eventi

• java.sql database connectivity class library: contiene classi usate per accedere ai dati contenuti in DB relazionali ed elaborarli usando il linguaggio SQL

Page 10: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 10

Interfaccia utente a finestre: i contenitori

Ogni componente GUI viene costruito all’interno di un contenitore

• Container è la classe (astratta) di base per i contenitori

• Window finestre di 1° livello senza cornice, titolo, menù

• Panel finestre annidabili

• Frame sottoclasse di Window di finestre con titolo, bordi, barra di menù, angoli di ridimensionamento

• Dialog finestre di dialogo

Page 11: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 11

Impostazione della dimensione della finestra

Il metodo resize( )

Al momento della sua creazione, ad una finestra vengono assegnate dimensioni di default. Con il metodo resize( ) è possibile impostare le dimensioni volute

void resize (int nuovaLunghezza, int nuovaAltezza)

void resize (Dimension nuoveDimensioni)

un oggetto di tipo Dimension ha due campi “width” e “height”

Page 12: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 12

Gli elementi dell’interfaccia utente: i controlli

Programmare una interfaccia utente grafica coinvolge diversi aspetti:

• I controlli utilizzati ed il modo in cui essi sono realizzati

• Il modo in cui i controlli vengono organizzati sullo schermo

• Il modo in cui risponde il programma agli eventi quali ad esempio premere un tasto sulla tastiera, cliccare col mouse su un pulsante, o trascinare un oggetto grafico col mouse

Page 13: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 13

I bottoni

• I bottoni vengono utilizzati per segnalare al programma una azione da compiere

• Per inserire un bottone nell’interfaccia, basta creare una istanza della classe Button ed aggiungere tale oggetto in una finestra

Frame finestra = new Frame(“Graphical User Interface”);Button exit = new Button( );Button ok = new Button(“OK”);exit.setLabel(“EXIT”);finestra.add(exit);finestra.add(ok);

• I dettagli della realizzazione dell’aspetto grafico dei controlli sono gestiti in maniera trasparente al programmatore dalle classi di java.awt

Page 14: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 14

Le etichette

• Le etichette sono in essenza nient’altro che stringhe di testo da inserire in un qualche contenitore

• Una etichetta è un oggetto di tipo Label che ha associato un testo

Label etichetta = new Label (“ATTENZIONE!”);Label hello = new Label( );String messaggio;hello.setText(“Salve, gente”);messaggio = etichetta.getText( );

Page 15: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 15

Le caselle

• Per comunicare al programma un cambiamento dello stato del sistema è possibile usare un Checkbox

• Una casella Checkbox è un oggetto con uno stato che può essere on oppure off, ed ha l’aspetto grafico di un quadratino con associata una stringa

• Per cambiare lo stato di un checkbox, basta cliccare col mouse nella casella Checkbox utenteEsperto = new Checkbox(“ESPERTO”);

Checkbox utenteNovizio = new Checkbox(“NON ESPERTO”);Boolean stato;.......stato = utenteEsperto.getState( );

Page 16: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 16

Radio Buttons

• Un Radio Button è un caso speciale di Checkbox: i Radio Buttons possono essere raggruppati assieme in modo che uno solo di essi sia nello stato on

• Se uno dei Radio Buttons di un gruppo è off e viene cliccato, quello che era on viene automaticamente posto a off

• Per raggruppare i Radio Buttons si usa la classe CheckboxGroup

CheckboxGroup lingua = new CheckboxGroup( );

Checkbox inglese = new Checkbox(“English”, lingua, true);

Checkbox italiano = new Checkbox(“Italiano”, lingua, false);

Page 17: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 17

Menù

• Per creare un menù a tendina si utilizza la classe Choice

• Le varie possibili opzioni del menù sono specificate come stringhe aggiunte all’oggetto di tipo Choice

• paramString( ) ritorna la stringa correntemente selezionata

Choice modifica = new Choice(“Modifica” );

String selezione;

modifica.addItem(“Copia”);

modifica.addItem(“Taglia”);

modifica.addItem(“Incolla”);

.....

modifica.select(“Copia”);

selezione = modifica.paramString( );

Page 18: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 18

Liste• Una lista permette di selezionare una stringa da un elenco fornito di frecce di scrolling

• E’ anche possibile selezionare una sequenza di stringhe

• Il costruttore no-arg di List crea una lista di cui non viene mostrato nessun elemento. Più usato è il costruttore con 2 argomenti

List nomi = new List(4, true );String[ ] nomiSelezionati;nomi.addItem(“Aldo”);nomi.addItem(“Carla”);nomi.addItem(“Ettore”);nomi.addItem(“Giovanni”);nomi.addItem(“Maria”);nomi.addItem(“Luisa”);.......nomiSelezionati = nomi.getSelectedItems( );

Page 19: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 19

Campi di testo

• Un campo di testo permette all’utente di scrivere una stringa

• La classe TextField contiene una varietà di costruttori e metodi per creare campi di testo, scriverci dentro, selezionare il testo scritto

TextField testoA = new TextField( );

TextField testoB = new TextField(24);

TextField testoC = new TextField(“Scrivere quì”);

TextField testoD = new TextField(“Scrivere anche quì”, 24);

String scritto = testoC.getText( );

String scrittoSelezionato = testoD.getSelectedText( );

Page 20: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 20

Aree di testo

• Una area di testo è un componente del tutto simile a TextField, con la caratteristica di poter contenere un testo formato da più linee, con barra di scorrimento verticale

• E’ possibile specificare all’atto della creazione di un componente di tipo TextArea il numero di caratteri per ciascuna riga e il numero di righe visualizzate

TextArea lineeDiTesto = new TextArea(“testo su più linee”, 8, 24);

Page 21: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 21

Barre di scorrimento

• Una barra di scorrimento è un controllo che permette di muovere una casella di scorrimento all’interno di una guida per mezzo di due frecce direzionali

• E’ possibile specificarne l’orientamento orizzontale/verticale, e il suo stato è caratterizzato da un valore che riflette la posizione della casella di scorrimento

Scrollbar barra = new Scrollbar(Scrollbar.VERTICAL, 20, 5, 0, 80);

Crea una barra di scorrimento verticale, con posizione iniziale 20, incremento pari a 5, valore minimo 0, valore massimo 80

Page 22: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 22

Inserire componenti: i Layout Managers• Un Layout Manager è un oggetto che si occupa di disporre automaticamente i componenti inseriti in un contenitore secondo un ben preciso criterio

• java.awt definisce diversi Layout Managers standard, fra cui:• FlowLayout Dispone i componenti per righe

• BorderLayout Inserisce componenti in sezioni N, E, S, W, Center

• CardLayout Dispone i componenti in una pila, con un bottone per “voltare” i componenti come

fossero un mazzo di carte

• GridLayout Dispone i componenti su una griglia

Page 23: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 23

Inserire componenti: un esempio

import java.awt.*;

public class FrameDemo { public static void main (String args[ ]) {

Button bottoni[ ] = new Button[6];Frame demo = new Frame(“Questa è una demo”);demo.setLayout(new BorderLayout( ));for (int i = 1; i < 6; i++) { bottoni[i] = new Button(“BOTTONE” + i);}demo.add(BorderLayout.NORTH, bottoni[1]);demo.add(BorderLayout.SOUTH, bottoni[2]);demo.add(BorderLayout.EAST, bottoni[3]);demo.add(BorderLayout.WEST, bottoni[4]);demo.add(BorderLayout.CENTER, bottoni[5]);demo.show( );

}}

Page 24: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 24

Gestione della grafica: la classe Graphics

Un oggetto di tipo Graphics rappresenta essenzialmente una porzione dischermo in cui è possibile mostrare testi, immagini, forme in modo indipendentedalla piattaforma

Per disegnare un oggetto di tipo Graphics si utilizza il metodo paint( ) dellaclasse Component, cui si deve passare il contesto grafico di tipo Graphics Per ottenere il contesto grafico di una finestra si usa il metodo getGraphics( )

import java.awt.Frame;import java.awt.Graphics;

public class SimpleGrafica extends Frame { public void paint (Graphics g) {

g.drawRect(10, 10, 100, 75); }}

Page 25: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 25

Disegnare linee

Per disegnare linee in un oggetto di tipo Graphics si utilizza il metodo

drawLine(int inizioX, int inizioY, int fineX, int fineY) La linea viene disegnata nel colore attivo dal punto (inizioX, inizioY) al punto (fineX, fineY)

import java.awt.*;

public class Linee extends Frame { public void paint (Graphics g) {

g.drawLine(10, 10, 100, 75);g.drawLine(10, 10, 40, 75);

g.drawLine(40, 10, 40, 75); }}

Page 26: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 26

Disegnare rettangoli

Per disegnare rettangoli in un oggetto di tipo Graphics si usano metodo quali

drawRect(int alto, int sin, int larg, int altez)

drawRoundRect(int alto, int sin, int larg, int altez, int diamX, int diamY)

fillRect(int alto, int sinistra, int larghezza, int altezza)

fillRoundRect(int alto, int sin, int larg, int altez, int diamX, int diamY)

import java.awt.*;

public class Rettangoli extends Frame { public void paint (Graphics g) {

g.drawRect(10, 10, 100, 75);g.fillRoundRect(20, 20, 40, 35, 15, 15);

g.drawRoundRect(40, 30, 40, 15, 10, 10); }}

Page 27: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 27

Disegnare ellissi e cerchi

Per disegnare ellissi e cerchi in un oggetto di tipo Graphics si usano metodo quali

drawOval(int alto, int sin, int larg, int altez)

fillOval(int alto, int sinistra, int larghezza, int altezza)

import java.awt.*;

public class Ellissi extends Frame { public void paint (Graphics g) {

g.drawOval(10, 10, 100, 75);g.fillOval(20, 20, 40, 35);

g.fillOval(40, 30, 40, 40); }}

Page 28: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 28

Disegnare archi

Per disegnare archi in un oggetto di tipo Graphics si usano metodo quali

drawArc(int alto, int sin, int larg, int altez, int angInizio, int angCurv)

fillArc(int alto, int sin, int larg, int altez, int angInizio, int angCurv)

import java.awt.*;

public class Archi extends Frame { public void paint (Graphics g) {

g.drawArc(10, 10, 50, 25, 0, 90);g.fillArc(20, 20, 40, 40, 90, -120);

}}

Page 29: Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 71 Uso dellinterfaccia Runnable interface Runnable { public void run ( ); } Linterfaccia

Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 7 29

Disegnare poligoni

Per disegnare poligoni in un oggetto di tipo Graphics si usano metodo quali

drawPolygon(int x[ ], int y[ ], int numPunti)

fillPolygon(int x[ ], int y[ ], int numPunti)

import java.awt.*;

public class Clessidra extends Frame { public void paint (Graphics g) {

int num = 5;int puntiX[ ] = {30, 200, 30, 200, 30};int puntiY[ ] = {30, 30, 200, 200, 30};g.drawPolygon(puntiX, puntiY, num);

}}