|
|
|
Exercici 1: Les interfaces Listener |
|
|
|
Es tracta de posar a prova el domini del paradigma
esdeveniment-oient (event-listener).
L'exercici consisteix a fer un nou projecte,
M5ex01, definit com a "Basic
Java Application", i del codi que automàticament escriu
JCreator al fitxer
M5ex01.java suprimir-ne el mètode
constructor
public M5ex01() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent
e) {
dispose();
System.exit(0);
}
});
} |
i substituir-lo per aquest altre, molt més senzill:
public M5ex01() {
addWindowListener(this);
} |
Això implica que el listener
dels esdeveniments java.awt.event.WindowEvent
és ara el propi frame i per tant
és necessari implementar-li la
interfície java.awt.event.WindowListener.
Feu-ho per tal d'aconseguir:
- Que la finestra es tanqui
i l'aplicació s'acabi quan es
prem el botó "X" de dalt a la dreta (això
ja ho feia sense cap variació en el codi que proposa JCreator)
- Que la finestra es torni de color
gris clar (Color.LIGHT_GRAY) quan deixi de
ser activa, (per exemple, quan cliquem
alguna altra finestra de la pantalla) i que recuperi el color
blanc (Color.WHITE) quan torni a ser activa
(per exemple, quan hi cliquem a sobre).
- Que en reduïrla a una icona
amb el botó corresponent de dalt a la dreta, les seves dimensions
(mètode public
void setSize(int width,int height)) passin a ser 200x200, cosa
que veurem en desiconificar-la.
Recordeu que per implementar
una interface en una classe,
cal afegir-li tots els mètodes
propis d'aquesta interfície, encara
que no es facin servir. Per saber quins són aquests mètodes,
heu de consultar la documentació
de la interfície.
|
|
|
|
Exercici 2: Un traductor de noms de nombres |
|
|
|
El següent exercici consisteix en un petit
traductor de noms de nombres del zero al nou. Premeu el botó
d'aquí sota per veure què heu d'aconseguir fer: |
|
|
|
|
|
|
|
- El projecte ha
de dir-se M5ex02.
- El frame ha de ser de 150x250.
- El font del camp
de text ha de ser "SansSerif",
"plain" de mida
10.
- El font dels botons
ha de ser "SansSerif",
"plain" de mida
30.
- Recordeu que el mètode per
obtenir un nombre enter (int)
a partir d'una cadena (String)
s és static
int Integer.parseInt(String s) i que el mètode
per convertir un nombre enter (int)
num a cadena (String)
és String String.valueOf(int num).
Consulteu la documentació de
les classes java.lang.Integer
i java.lang.String.
- Les diverses traduccions, tal com hem fet al segon
dels "Editor de missatges" (pràctica
5, projecte Missatgeria02),
han d'estar en un fitxer a part, Etiquetes.java
el qual, no ho oblideu, heu de copiar a la
carpeta del projecte i, a més, heu d'afegir
al projecte des de JCreator.
- El codi de M5ex02.java
ha de ser independent respecte a la quantitat
d'idiomes. Això vol dir que les variacions al fitxer
Etiquetes.java no han de suposar haver de
fer variacions al fitxer M5ex02.java.
|
|
|
|
Exercici 3 (optatiu): Controls, layout managers,
interfícies... |
|
|
|
Aquest exercici consisteix en canviar el segon
dels "Editor de missatges" (pràctica
5, projecte Missatgeria02)
per tal que la selecció d'idioma es faci, no amb un Choice,
sinó amb un CheckboxGroup. Premeu
el botó d'aquí sota i vegeu què heu d'aconseguir: |
|
|
|
|
|
|
|
- El projecte ha
de dir-se M5ex03. Podeu fer servir el mateix
fitxer Etiquetes.java que, no ho oblideu,
heu de copiar a la carpeta del projecte
i, a més, heu d'afegir al projecte
des de JCreator. Afegiu-li la possibilitat
de la llengua francesa o una altra que us sigui avinent.
- Ha de mantenir-se la independència
del codi respecte de la quantitat d'idiomes
i d'opcions per a cada idioma. Això
vol dir que les variacions al fitxer
Etiquetes.java no han de suposar haver de
fer variacions al fitxer M5ex03.java.
- Heus aquí alguns consells:
- Feu un panel especial pels checkboxes
del checkboxgroup d'idiomes, amb
java.awt.GridLayout com a layout
manager. El nombre de files
ha de ser 1 i el de columnes l'heu
d'obtenir a partir del fitxer Etiquetes.java.
- La classe java.awt.CheckboxGroup
no disposa de cap mètode
per saber l'índex, és
a dir, el número d'ordre del checkbox
que està seleccionat. Segurament,
a manca d'una solució millor, us convé:
- Fer servir i per tant definir,
una classe filla de java.awt.Checkbox
(digueu-li ElMeuCheckbox, per exemple)
amb una variable de classe
int index per enmagatzemar-hi la posició
del checkbox dins del checkboxgroup.
Llavors, al mètode constructor,
a més dels paràmetres
del constructor de java.awt.Checkbox,
hi heu d'incloure el paràmetre
int id, el valor
del qual es dipositarà a index.
Això demana, a més, un mètode
public int getIndex() per poder saber
l'índex d'un ElMeuCheckbox.
- Fer servir i, per tant definir,
una classe filla de java.awt.CheckboxGroup
(digueu-li ElMeuCheckboxGroup, per
exemple) amb una variable de classe
ElMeuCheckbox[] checkboxes per emmagatzemar-hi
un array lineal amb els checkboxes
del checkboxgroup. Al mètode
constructor , a més
dels paràmetres del
constructor de java.awt.CheckboxGroup,
(no en té!) hi heu d'incloure el paràmetre
int numCheckboxes, el valor
del qual és el nombre d'idiomes disponible i que heu
d'obtenir a partir del fitxer
Etiquetes.java. La variable
checkboxes s'inicialitza
ara amb la línia de codi:
checkboxes=new ElMeuCheckbox[numCheckboxes]; |
Llavors, a la classe ElMeuCheckboxGroup,
hi ha d'haver els mètodes:
- public void addCheckbox (ElMeuCheckbox
checkbox,int id), que ha de posar el checkbox
d'índex id
a la posició id de l'array
checkboxes.
- public ElMeuCheckbox getCheckbox (int
id), que ens ha de retornar
el checkbox a la posició
id de l'array
checkboxes.
|
|
Tramesa al vostre tutor: |
|
|
|
Comprimiu les dues (o tres) carpetes
M5ex01 i M5ex02 (i M5ex03)
en un fitxer ZIP,
que es dirà <nom_usuari>_m5.zip
i trameteu-lo al vostre tutor. |
|
|
|
|
|
|
 |
|
|
|
|