:: Enseignements :: ESIPE :: E4INFO :: 2007-2008 :: Interface graphique ::
[LOGO]

TP noté


Il est interdit d'utiliser des programes déjà écrits. Les seuls supports autorisés sont le cours et vos corrections des TDs imprimés.

Exercice 1 - Pique, trèfle, coeur, carreau

A - Fabriquer un JPanel contenant "IR" dans ses coins et son centre.



B - Mettre de l'espace autour des "IR" dans les coins.



C - Sachant que le symbole coeur s'obtient avec \u2665, remplacer IR par des coeurs rouges, en respectant les tailles de polices de l'applet (celui du milieu est plus gros).



D - Modifier le panel pour qu'il ait un fond blanc et la même bordure que dans l'applet. Puis, le mettre sur fond vert foncé avec la taille 100x140.



E - Faire en sorte que la carte devienne bleue quand la souris passe dessus. Elle doit redevenir normale quand la souris s'en va.



F - Remplacer le coeur du milieu par "As" et ajouter un menu à la fenêtre. Chaque clic sur la carte doit ajouter un item dans le menu.



Exercice 2 - Problème

Le but de cet exercice est de créer une table graphique permettant de visualiser les performances de votre machine.

  public class TimeData {
    private final long start;
    private final long end;
    private final long iteration;
  
    private TimeData(long start,long end,long iteration) {
      this.start=start;
      this.end=end;
      this.iteration=iteration;
    }
  
    public long getStart() {
      return start;
    }
    public long getEnd() {
      return end;
    }
    public long getIteration() {
      return iteration;
    }
  
   public static TimeData createTimeData() {
      long iteration=0;
      long start=System.nanoTime();
      long end;
      for(;;) {
        iteration++;
        end=System.nanoTime();
        if (end>start+1000000)
          break;
      }
      return new TimeData(start,end,iteration);
    }
  }
}

G - Afficher une table de 3 colonnes ayant pour titres 'start', 'end', 'iteration' et possédant 10 lignes. Pour le test, chaque case contiendra la valeur 100 alignée à droite.



H - Modifier le code pour afficher une barre horizontale en bas de la table avec un bouton "start", une barre de progression et un bouton "Cancel". Les composants seront séparés par un espace de 5 pixels entre eux et de 2 pixels des bords.




I - Utilisez la classe TimeData (sans la modifier), pour créer un modèle de table permettant d'afficher des données de ce type. Pour le test, vous remplirez la table avec dix lignes.



J - Modifier votre modèle pour afficher une nouvelle colonne "ratio" affichant pour chaque ligne le calcul suivant:
10 000*iteration/(end-start). Vous ne devez pas modifier la classe TimeData.



K - Modifier votre code pour permettre l'ajout d'un objet TimeData à chaque fois que l'on clique sur le bouton 'start'.



L - Comme la création d'un TimeData prend un certain temps, utiliser un SwingWorker pour effectuer l'ajout. Vous devrez aussi modifier votre modèle en conséquence.
Pour le test, chaque clic sur le bouton 'start' démarrera un SwingWorker qui effectuera l'ajout de 100 TimeData. Entre le calcul de deux TimeData, on attendra 10 millisecondes, il faudra donc exécuter un code comme celui-ci en tâche de fond:
   for(int i=0;i<100;i++) {
     TimeData data=TimeData.createTimeData();
     ...
     Thread.sleep(10);
   }
  



M - Faites en sorte que la barre de progression soit mise à jour.



N - Faites en sorte que le bouton start soit inactif lors de l'exécution du calcul en tâche de fond et se réactive à la fin de celui-ci.



O - Faites en sorte que le bouton "Cancel" interrompe le calcul.