Enrera
Mòdul 5
Iniciació a la programació en Java
  Exercicis
   
 
   
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.
   
   
 
Amunt