Algorithmique & Programmation Orientée Objet Semestre 2 ST
Programmation en mode graphique Introduction La création d'affichages graphiques est à réaliser au moyen de l'API FenetreGraphique développée à cette fin. Celle-ci peut être téléchargée en cliquant sur le lien suivant: FenetreGraphique.zip. Ce fichier zip contient des fichiers .class qu'il convient d'extraire dans le répertoire où sera placé le fichier .java développé pour le projet. La documentation javadoc de référence de cette API est disponible via le lien suivant: Documentation javadoc FenetreGraphique. Les fonctionnalités principales de cette API sont: Paramétrage et ouverture d'une (ou plusieurs) fenêtre de dessin Choix de la couleur de tracé Tracé d'un pixel selon la couleur de tracé Tracé d'un segment de droite selon la couleur de tracé Tracé d'un rectangle selon la couleur de tracé Remplissage d'un rectangle selon la couleur de tracé Tracé d'un cercle selon la couleur de tracé Remplissage d'un cercle selon la couleur de tracé Tracé d'une chaîne de caractères selon la couleur de tracé Tracé d'une image Activation/désactivation du mode de tracé "ou exclusif" Choix de la couleur d'effacement de la zone de tracé Effacement de la zone de tracé avec la couleur d'effacement Chargement et téléchargement d'une image au format png Temporisation d'exécution pendant une période de temps comptée en milli-secondes Récupération des touches de clavier frappées Récupération des boutons de souris utilisés Récupération des positions en x et en y de la souris Un exemple d'utilisation est proposé au lien suivant: TestFenetreGraphique.java (exécution). Mode d'emploi L'ouverture d'une fenêtre graphique peut être réalisée en instanciant un objet (fg dans l'exemple ci-dessous) de la classe FenetreGraphique au moyen du constructeur disponible (voir la documentation de référence pour la liste et le rôle des paramètres d'entête du constructeur) : FenetreGraphique fg = new FenetreGraphique(...); Ce constructeur permet de construire un objet chargé de gérer la "vie" de la fenêtre: création et ouverture, affichages qui y seront réalisés, fermeture et destruction finale. La réalisation d'un affichage dans la fenêtre fg suit le schéma suivant: - Effacement du buffer de dessin : fg.clear() - Exécution de tous les appels de méthode correspondant aux éléments graphiques à tracer dans le buffer de dessin : fg.draw*(...), fg.fill*(...), ... - Affichage du buffer de dessin obtenu : fg.flush() Pour des raison d'optimisation de la vitesse de dessin, l'affichage effectif du buffer de dessin d'une fenêtre n'est pas réalisé à chaque ordre de dessin (void draw*(...) ou void fill*(...)), mais seulement lorsque la méthode void flush() est exécutée sur cette fenêtre. La fenêtre graphique fg reste ouverte (et bloque la terminaison de l'application) jusqu'à ce que la méthode statique FenetreGraphique.exit() soit exécutée qui entraine sa fermeture et la fermeture de toutes les autres fenêtres ouvertes (voir plus loin) puis la terminaison de l'application. Système de coordonnées Les coordonnées utilisées dans les méthodes sont comptées en pixels (valeurs entières de type int). Le repère d'affichage est orienté avec l'axe des x en direction de la droite et l'axe des y en direction du bas de la fenêtre d'affichage. L'origine (coordonnées (0,0)) est située en haut à gauche de la fenêtre. Exemple 1 Affichage d'un segment de droite et d'un cercle (exécutable, fichier source): /* Application exemple d'utilisation des methodes */ /* contenues dans FenetreGraphique.class */ public class SimpleFenetreGraphique { public static void main(String [] args) { /* Initialisation et ouverture */ /* de la fenetre d'affichage graphique */ /* Coin superieur gauche en position ecran (50,50) */ /* Fenetre de taille 500x420 */ /* Zone d'affichage de taille 480x360 */ /* Titre "Test affichage graphique" */ FenetreGraphique fg = new FenetreGraphique(50,50,500,420,480,360,"Test affichage graphique"); /* Choix d'un vert fonce comme couleur d'effacement */ /* de la zone d'affichage */ fg.setClearColor(0,40,0); /* Ordre d'effacement de la zone d'affichage */ fg.clear(); /* Choix d'un rouge clair comme couleur de trace */ fg.setColor(200,0,0); /* Ordre d'affichage d'un segment de droite */ /* Extremite initiale de position (40,70) */ /* Extremite finale de position (400,300) */ fg.drawLine(40,70,400,300); /* Choix d'un bleu clair comme couleur de trace */ fg.setColor(0,0,200); /* Ordre d'affichage d'un cercle */ /* Centre de position (310,170) */ /* Rayon: 90 pixels */ fg.drawCircle(310,170,90); /* Envoi a l'ecran de l'image telle que construite */ /* par l'ensemble des ordres d'affichage executes */ /* depuis le dernier fg.flush */ fg.flush(); /* Temporisation de 10000 milli-secondes */ FenetreGraphique.wait(10000); /* Fermeture de la fenetre */ /* et interruption de l'application */ FenetreGraphique.exit(); } } Exemple 2 Téléchargement et affichage d'une image (exécutable, fichier source): /* Application exemple d'utilisation des methodes */ /* contenues dans FenetreGraphique.class */ public class ImageFenetreGraphique { public static void main(String [] args) { int [][] image; /* Initialisation et ouverture */ /* de la fenetre d'affichage graphique */ /* Coin superieur gauche en position ecran (50,50) */ /* Fenetre de taille 500x420 */ /* Zone d'affichage de taille 480x360 */ /* Titre "Test affichage graphique" */ FenetreGraphique fg = new FenetreGraphique(50,50,500,420,480,360,"Test affichage graphique"); /* Choix du blanc comme couleur d'effacement */ /* de la zone d'affichage */ fg.setClearColor(255,255,255); /* Ordre d'effacement de la zone d'affichage */ fg.clear(); /* Telechargement d'une image sur un site web */ image = fg.downloadPNGFile("http://raphaello.univ-fcomte.fr/Algo-s2/18-19-Projets/Fleur450x450.png"); /* Affichage de l'image lue */ /* Tout n'est pas affiche car l'image */ /* est trop grande */ /* Precaution: Si l'image n'est pas lisible, */ /* elle n'est pas affichee et un message d'erreur */ /* est affiche */ if ( image != null ) fg.drawImage(10,10,image); else Ecran.afficherln("Impossible de lire cette image"); /* Envoi de la zone d'affichage graphique a l'ecran */ fg.flush(); /* Temporisation de 10000 milli-secondes */ FenetreGraphique.wait(10000); /* Fermeture de la fenetre */ /* et interruption de l'application */ FenetreGraphique.exit(); } } Remarque L'instanciation d'un objet FenetreGraphique a pour résultat l'ouverture de la fenêtre créée a coté (en plus) de la fenêtre "console" texte classique au sein de l'éditeur scite si celui-ci est utilisé. Il est possible d'ouvrir plus d'une fenêtre graphique en instanciant plusieurs objets FenetreGraphique. Toutes les méthodes sauf les deux méthodes statiques void wait(...) et void exit() sont des méthodes d'instance et sont donc automatiquement et obligatoirement "envoyées" dans l'objet FenêtreGraphique sur lequel elles sont exécutées. Les méthodes Clavier.saisir*(), Ecran.afficher*(), Ecran.sautDeLigne() et Ecran.formater(...) continuent à fonctionner normalement dans la fenêtre console texte d'exécution de l'application et ne peuvent pas être redirigées vers la (ou les) fenêtre graphique. Suivi de versions Version actuelle (6 avril 2019): FenetreGraphique.zip
Clavier.class - Ecran.class - FenetreGraphique.zip - Documentation