Questo documento fa parte del materiale impacchettato nel file es05.jar
che si trova sul
sito di
Fondamenti di Informatica LB
La casa di riposo Villa Serena di Cesena commissiona alla softare house ACME la realizzazione di un programma per
disegnare al computer per gli anziani, che chiamiamo ACME Paint
.
Alcuni progettisti hanno suggerito un percorso per arrivare allo sviluppo del programma di disegno attraverso tre fasi:
Far comparire una finestra, centrata nello schermo (vedere servizi classe ToolKit
),
di dimensioni fisse, ad esempio 400 x 400. Alla chiusura della finestra l'applicazione deve terminare.
Il pannello della finestra diviso in due zone (BorderLayout
): nella parte CENTER
disegnare una crocetta (10x10) in mezzo, mentre nella zona SOUTH
un pulsante centrato orizzontalmente,
con la scritta 'Quit'. Quando lo si preme, la finestra deve essere chiusa,
La figura mostra uno schizzo della GUI (graphic user interface) dell'applicazione, dopo la prima fase.
Nella parte SOUTH
aggiungere quattro pulsanti ('Up','Down','Left','Right'), tutti allineati a sinistra
Il pulsante 'Quit' è ora allineato a destra).
Fissata una certa dimensione di griglia D (es.: 5 pixel), allora: la pressione di 'Up' deve far
salire la crocetta di D pixel; la pressione di 'Down' fa scendere la crocetta di D pixel, e così via ...
Evitare di far uscire la crocetta dai margini. Con un JTextField
posizionata nella zona NORTH
permettere la variazione di D: quando si preme Invio, la dimensione della griglia deve cambiare di conseguenza.
La figura mostra uno schizzo della GUI dell'applicazione, dopo la seconda fase.
La crocetta deve poter essere ora spostata dove si 'clicka' il mouse. Quindi è necessario
gestire eventi e listener relativi al mouse (MouseEvent, MouseListener,
...).
NOTA: la crocetta va inserita/spostata tenendo conto della griglia. Quindi vogliamo
consentire il tracciamento di linee: l'utente mette la crocetta nel punto di partenza della linea, quindi preme un pulsante 'Start'
(zona NORTH
, assieme al JTextField
). Alla pressione, lo 'Start' diventa 'Stop'.
Ora spostando la crocetta viene sempre mostrata una linea tra la posizione di Start e quella corrente.
Quindi l'utente clicka su 'Stop' (che diventa 'Start') e la linea deve rimanere impressa.
NOTE:
per il disegno di linee vedere la documentazione Java relativa alle classi Graphics
e Graphics2D
per far sì che le linee persistano quando la finestra viene ridisegnata, è necessario
che nel metodo paintComponent()
si disegnino tutte le linee impresse fino a quel momento...
La figura mostra uno schizzo della GUI dell'applicazione, dopo la terza fase.
L'obiettivo è quindi sviluppare l'applicazione ACMEPaint. L'applicazione può esser sviluppata passando dalla prima fino alla terza fase, oppure direttamente considerando la terza fase.
sviluppare l'applicazione nel package es05
(quindi i sorgenti andranno nella directory
src/es05
e le classi compilate in es05/build
;
in questa esercitazione non è fornito alcun materiale aggiuntivo (sorgenti, classi compilate, documentazione),
quindi le directory src/es05
, build
e docs/apidocs
sono vuote.
Vogliamo progettare e sviluppare le funzionalità di recording e playback delle interazioni dell'utente (gestione di macro). Ovvero si vogliono registrare (per poi rieseguire) sequenze di interazioni (sorta di macro) fra l'utente e il componente sviluppato. Ciò comporta la creazione di tre nuovi pulsanti: start recording, stop recording e playback. Dal momento che si agisce su start recording le azioni ritenute significative vengono 'registrate'/salvate/memorizzate. Come esempio di azioni ritenute significative abbiamo: la pressione pulsanti U,L,R,D, Start, Stop, e click del mouse... Agendo su stop recording si segnala la fine della registrazione. Agendo su playback si eseguono automaticamente le azioni registrate.
Memorizzazione e recupero delle sequenze interattive su file (utilizzare la classe Swing
JFileChooser
come finestra di dialogo per scegliere il file).
Fornire all'utente la possibilità di scegliere il colore corrente con cui devono essere tracciate le linee, mediante opportuno combo box (contenente i nomi dei colori)