II. Avancement du projet

1/ Structure de données

a) Classe Country

La première étape de cette partie est les création de la classe Country ainsi que celles de toutes les fonctions nécessaires au bon fonctionnement du programme.

Il nous faudra donc un constructeur simple comprenant les informations de base comme le nom anglais, français et les codes ISO2, ISO3 et numériques.

Ensuite il faudra créer les fonctions de parcours d’arborescence de fichier afin de déterminer les adresses des fichiers suivants :

Pour cela on choisira de manière simple une parcours récursif :

Ensuite il nous faudra lire à travers différents .CSV et .TXT des informations comme la population, la superficie, à partir de ces dernières calculer la densité de population. Pour simplifier la lecture des fichiers csv nous utiliserons la bibliothèque OpenSource OpenCSV qui permet une lecture rapide et optimale de nos fichiers. Et enfin grâce à l’adresse de la carte de la région on peut retrouver le nom de la région via le dossier parent.

b) Classe DatabaseList

Comme indiqué précédemment nous travaillerons avec une ArrayList afin de stocker nos différents pays.

Pour cette ArrayList nous implémenterons les diverseses fonction de base comme .add() .remove() .getSize() tout en prenant soin de créer les exceptions nécessaires.

Au sein de cette classe DatabaseList nous créerons deux fonction d’initialisation qui permettront de lire dans le fichier principal « country_code_ISO.csv » les noms des pays, codes ISO et numériques. Nous créons ensuite un objet Pays à partir de ces informations et l’ajoutons à l’ArrayList.

Ensuite nous créerons une fonction qui parcourra toute l’ArrayList et initialisera chaque pays de cette dernière grâce à la fonction implémentée dans la classe Country.

Nous créerons directement afin de faciliter le lien avec l’interface graphique des fonctions permettant de récupérer des ArrayList de pays selon différents critères (nom de région, contenant un String, par population minimale et maximale...).

2/ Interface Graphique

a Fonctionnement

Pour faire fonctionner correctement notre interface graphique nous avons fait le choix d’utiliser la List pour afficher la liste des Pays Recherchés et ensuite de permettre à l’utilisateur d’afficher le pays de son choix en cliquant directement sur le pays qu’il désire dans la liste.

b)Constructeur

Il est évident que pour travailler il nous faut inclure dans le constructeur une DatabaseList que nous définirons lors de l'exécution comme celle que nous avons implémentée ci-dessus.

c) Variables utiles

Pour le bon fonctionnement de ce programme nous avons utilisés différentes variables globales. Tout d’abords tout ce qui va relever de l’affichage des information du pays sélectionné car ils doivent être modifiés de manière dynamique. Mais également notre listmodel dont nous parlerons plus tard car son contenu variera en fonction des recherches.

Pour l’interface graphique nous avons donc décomposé notre fenêtre en différents Panels.

d) PanelList

Pour ce panel nous avons simplement utilisé le listmodel que nous pourrons changer selon les différents recherches et nous avons intégré cette liste à un ScrollPane afin d’avoir une navigation optimale.

Nous rajouterons un JLabel afin d’indiquer le critère de la recherche.

e) ResearchPanel

Sur ce panel nous avons disposés de quoi permettre à l’utilisateur de mener sa recherche. Il y a donc un JTextFiel afin de chercher directement le pays, un JComboBox afin de sélectionner la recherche et deux Jtextfield pour définir le minimum et le maximum de population dans les pays à rechercher.

En fonction des choix de l’utilisateur nous modifierons donc le listmodel, ce qui changera le contenu du ContentPane.

f) InfoPanel

Dans ce Panel nous afficherons toutes les informations désirées du pays sélectionné. En effet lorsque l’on choisit un pays via le ContentPane on lance une fonction d’initialisation qui va modifier le contenu de tout ce qui relève de l’affichage des informations (images, données...). L’avantage principal du choix que nous avons fait de mettre un bouton pour changer entre drapeau et graphique de population et carte du pays et carte de la région est que cela permet un affichage correct et clair des images.

g) HistoryPanel

Le dernier panel du programme permet d’afficher le dernier pays consulté, et ce même entre deux ouvertures du programme. En effet quand on sélectionne un pays via le ContentPane on stocke son Nom dans un .txt. Il suffit donc d’appuyer sur le bouton history pour afficher dans le ContentPane le dernier pays visité. Nous créerons également un bouton pour effacer l’historique.

h) Difficultés rencontrées

La première difficulté rencontrée a été de devoir choisir un Layout Manager bien adapté pour avoir le rendu souhaité et positionner chaque élément à la bonne place. Pour chaque partie de l’interface un BoxLayout a été utilisé excepté pour la partie principale affichant les résultats ; il s’agit un GridBagLayout. Certainement plus difficile à maîtriser mais qui a le mérite de donner plus de contrôle et choisir précisément l’emplacement de chaque élément dans une cellule selon des coordonnées.

La seconde difficulté, était la taille des images qui sont différentes les unes des autres ce qui modifiait complètement l’apparence de l’application et qui déplaçais des éléments qui devaient rester au même endroit. Nous utiliserons donc une fonction pour redimensionner les images selon une nouvelle hauteur tout en gardant leur ration afin de permettre un affichage optimal.

i) Rendu de l’interface

Voici ce à quoi ressemble l’interface à une semaine du rendu avant de la relier à la database de pays.

Screeshot du projet Précédent Accueil Suivant