FANTAR SAMI
SRC1 B1
TP n°7 : Composants SWING et gestion d’évenements
Exercice 1. Fenêtre principale de l’application
1.
Le nom du package à importer pour pouvoir utiliser des composants Swing est le package
"javax.swing.*;" l'astérisque permet de dire qu'on prend toutes les méthodes du package
On l'importe au début du programme ainsi que deux autres composants nécessaires "java.awt" et
"java.awt.event".
"java.swing" contient l'ensemble des composants "allégés" qui ont le maximum de
probabilités de fonctionner de la même façon sur toutes les plateformes.
"java.awt" contient toutes les classes nécessaires pour créer des interfaces utilisateurs et
pour l'utilisation d'images. Elle permet aussi de dessiner.
"java.awt.event" contient les interfaces et les classes nécessaires pour communiquer avec
les composants d' awt.
Composants Swing de la classe :
"JFrame" permet de créer une nouvelle fenêtre.
"ActionListener" permet d'invoquer la méthode adéquate lors d'une action.
"JLabel" est une zone de texte ou une image ou les deux.
"JTextField" est un composant allégé permettant d'éditer une ligne de texte.
"JButton" est un bouton permettant de réaliser des actions lors de la pression sur ce
dernier.
"JTextArea" est une zone de texte de plusieurs lignes.
"Dimension" est une classe encapsulée permettant de spécifier la hauteur et la largeur d'un
composant dans un seul objet.
"Color" permet de spécifier la couleur selon un code RGB.
"Font" permet de spécifier la couleur de fond permettant de rendre un texte visible.
"FlowLayout" permet d'arranger le positionnement des composants de gauche à droite,
comme les lignes d'un texte dans un paragraphe.
2.
La méthode "random" de la classe "Math" permet de donner un nombre de manière aléatoire. Elle
retourne une valeur de type double avec un signe positif plus grand ou egal à 0.0 et inférieur à 1.0
3.
Avant l’ajout de la méthode « pack », nous obtenions ceci :
Nous rajoutons dans le code du constructeur un appel à la méthode "pack". La classe PrixLot hérite
de la classe JFrame et la classe JFrame hérite de la classe Window donc de toutes les méthodes de
cette dernière. Nous recompilons et executons :
La méthode pack appartient à la classe Window et permet de redimensionner la fenêtre par
rapport au nombre d'éléments contenus dans la fenêtre.
Exercice 2. Gestion de l’interaction sur la fenêtre du jeu
1.Bouton et fermeture de la fenêtre
Lorsqu'on essaie de fermer la fenêtre en cliquant sur le bouton de fermeture de la fenêtre il ne ce
passe rien. On rajoute donc la ligne "setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)".
Maintenant le bouton de fermeture de la fenêtre fonctionne.
2. Test des valeurs entrées par le joueur
(a)
Pour gérer l'événement sur le bouton Go! il faut implémenter l'interface ActionListener. Mais
ActionListener oblige de déclarer ensuite dans la classe PrixLot, la méthode actionPerformed().
PrixLot peut maintenant écouter des événements. Pour pouvoir écouter les événements du bouton
go!, il faut ajouter un écouteur à la classe. On ajoute donc : bouton.addActionListener(this).
« This » permet de dire que l'écouteur est la classe courante donc PrixLot devient l'écouteur.
Dorénavant, l'écouteur permet d'appeler la méthode actionPerformed() dès qu' un événement
apparaît et lui passe cet événement en argument.
Puis on vérifie la source de l'événement passé en argument
On vérifie ensuite la source de l'événement passé en argument pour exécuter des instruction
diverses en fonction. Cela permet donc à la classe d'écouter plusieurs boutons enme temps et
de leur attribuer des actions.
(b)
public void actionPerformed(ActionEvent unEvnt)
{
if (unEvnt.getSource() == goButton) // Le joueur clic sur Go !
{
// On récupere la valeur saisie par le joueur pour la comparer
String valeur_joueur = tfSaisie.getText();
try
{
// On converti la chaîne valeur_joueur en int
int nbTape =Integer.parseInt(valeur_joueur);
if (nbTape==nbCache) //Cas où le joueur trouve d’un coup
{
taResultat.setForeground(Color.BLUE);
taResultat.setFont(new Font("Serif",Font.BOLD,14));
taResultat.setText("Bravo! Tu as trouvé du 1er coup!");
}
else
{
if (nbTape<nbCache)//Cas où nombre taper < nombre caché
{
taResultat.setForeground(Color.GREEN);
taResultat.setFont(new Font("Serif",Font.BOLD,12));
taResultat.setText("trop petit");
}
else //Cas où nombre taper > nombre caché
{
taResultat.setForeground(Color.YELLOW);
taResultat.setFont(new Font("Serif",Font.BOLD,18));
taResultat.setText("trop grand");
}
}
}
catch (NumberFormatException exc)
{
//Verification de la saisie du joueur
System.out.println("Vous n’avez pas saisie un entier") ;
}
}
}
3. Gestion du nombre d'essais
public void actionPerformed(ActionEvent unEvnt)
{
if (unEvnt.getSource() == goButton// Le joueur clic sur Go !
{
int k = nbEssaisAutorises - nbEssais;
if (nbEssais == nbEssaisAutorises)
//cas où nombre d’essais effectués =nombre d’essais autorisé
{
taResultat.setForeground(Color.RED);
taResultat.setFont(new Font("Serif",Font.BOLD,14));
taResultat.setText("Vous n'avez plus la possibilité de rejouer!
Vous avez perdu...");//msg d’erreur signalant que le jeu est
fini
tfSaisie.setEditable(false);//blocage de la saisie de tfsaisie
}
else
// cas où nombre d'essais effectués < nombre d'essais autorisé
{
String valeur = tfSaisie.getText();// Récupération de la valeur
tapée par le joueur
try
{
// On converti la chaîne valeur_joueur en int
int nbTape =Integer.parseInt(valeur);
if (nbTape==nbCache) //Cas où le joueur trouve d’un coup
{
tfSaisie.setEditable(false);
taResultat.setForeground(Color.GREEN);
taResultat.setFont(new Font("Serif",Font.BOLD,14));
taResultat.setText("Bravo! Vous avez deviné en
"+nbEssais+" essais.");
}
else
{
if (nbTape<nbCache)//Cas où nombre taper < nombre caché
{
taResultat.setForeground(Color.BLUE);
taResultat.setFont(new Font("Serif",Font.BOLD,12));
taResultat.setText("trop petit... Attention il ne vous
reste plus que "+k+"essais...");
}
else //Cas où nombre taper > nombre caché
{
taResultat.setForeground(Color.ORANGE);
taResultat.setFont(new Font("Serif",Font.BOLD,18));
taResultat.setText("trop grand… Attention, il ne vous
reste plus que "+k+" essais...");
}
}
}
catch (NumberFormatException exc)
{
//Verification de la saisie du joueur
System.out.println("Vous n’avez pas saisie un entier");
}
nbEssais = nbEssais+1;
}
}
}
4. Gestion des erreurs de saisie
(a)
Lorsque le jouer ne saisie pas une valeur entière dans le JtextArea tfSaisie, le terminal affiche un
message d’erreur « Vous n’avez pas saisie un entier».
Le bloc try{…} catch(NumberFormatException exc){…} dans la méthode actionPerformed permet de
vérifier que le type de données saisie correspond au bon format. Dans notre cas, le format attendu est
un integer (NumberFormat) le mot clé TRY permet de préciser un morceau du code sur lequel on
s'attend à qu'une erreur (exception) se présente.
Le mot clé CATCH sert à spécifier le code à exécuter pour une exception (ou une catégorie)donnée. Il
suffit alors de faire suivre le mot catch d'une parenthèse ouvrante, d'un type exception (une classe)
du nom qu'on lui donne (tout comme un paramètre de fonction), d'une parenthèse fermante, et du
code associé placé entre accolade.
Si un événement indésirable survient dans le bloc try, la partie éventuellement non exécutée de ce bloc
est abandonnée et le premier bloc catch est traité. Si catch est défini pour capturer l'exception issue
du bloc try alors elle est traitée en exécutant le code associé au bloc. Si le bloc catch est vide (aucune
instruction entre les accolades) alors l'exception capturée est ignorée.
(b)
catch (NumberFormatException exc)
{
//Verification de la saisie du joueur
JOptionPane.showMessageDialog (this ," Entrez un nombre
entier !!!", "Attention !", JOptionPane.WARNING_MESSAGE );
}
public static void showMessageDialog(Component parentComponent,
Object message,String title,int messageType)throws HeadlessException
On obtient un message d’erreur qui montre un message en utilisant une icône de défaut déterminée par le
paramètre de messageType lorsque l’utilisateur saisie autre chose qu’un nombre entier.
Les différents paramètres du panneau :
parentComponent - détermine la vue dans laquelle le dialogue est montré ; si nulle, ou si
parentComponent n'a aucune vue, une vue de défaut est employé
message texte à afficher (ici, Entrez un nombre entier !!!)
title - titre de la boite de message (ici, on l’appel Attention !)
messageType - type de messsage que le montre : ERROR_MESSAGE, INFORMATION_MESSAGE,
WARNING_MESSAGE, QUESTION_MESSAGE, or PLAIN_MESSAGE, selon le type de message,
l’icône d’alerte change.
Exercice 3. Ajout d’un menu à la fenêtre principale
1.
La classe MenuPrixLot.java crée un menu pour la fenêtre princiale .La méthode actionPerformed permet
d'exécuter des actions lorsque l'on clique sur l'une des rubriques du menu.
Explication des différents composants et méthodes utilisées :
JFrame() : Crée une fenêtre invisible sans titre.
JMenu () : Créer un menu pouvant être inséré dans une barre de menu.
JMenuItem () :Les éléments du menu sont représenté par des objets MenuItem.
add () : ceci permet d’ajouter des éléments au menu.
import java.awt.*;
1 / 10 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !