Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Complement POO Elements de La Programmation JAVA

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 68

Complément du Cours

POO
Eléments de la programmation JAVA

H. Mosteghanemi
1. Affichage des informations

L’affichage à l’écran en java utilise l’instruction


System.out.print (ou System.out.println)
 System.out.print est définie dans le package standard
java.lang.

Sa syntaxe:
System.out.print (″message″); // pour afficher le texte
//d’un message à l’écran
System.out.print (var); // pour afficher le contenu de la
//variable var

Pour afficher plusieurs éléments, on utilise l’opérateur +.


Exemple :
int x=3 ;
System.out.print (″Valeur de x= ″+ x) ; // pour afficher
Valeur de x= 3
Mme Kadri, Mme Zaouche 2
Affichage d’un objet

L’affichage d’un point permet d’afficher sa


référence.

Point P1=new Point ();


System.out.println(P1) ;

On aura à l'écran Point @ 12a34f

Mme Kadri, Mme Zaouche 3


2. Saisie de données

La saisie de données en java peut se faire en


utilisant plusieurs classes. Dans ce module,
nous nous contentons de deux classes Java:
Scanner et JOptionPane.

 Saisie avec La classe Scanner


La classe Scanner est définie dans le package
java.util. La saisie se fait en créant d’abord un
objet de la classe Scanner.

4
Création d’un objet Scanner

Scanner e = new Scanner (System.in);

Classe Java

Avec e, je lis mes Lecture à partir


variables de types du clavier
primitifs.

L’objet e est utilisé par la suite pour lire des entiers,


réels, chaines de caractères, … en invoquant une
méthode appropriée au type de la donnée à lire. Par
exemple, nextInt() pour lire un entier,
nextFloat() pour lire un réel, next() pour une
chaine de caractères. 5
Exemple Scanner

Import obligatoire

Un seul objet Scanner pour


import java.util.Scanner; lire mes variables de types
class Test{ primitifs.

public static void main(String args[]{


Scanner e=new Scanner(System.in);
int x=e.nextInt();
String ch=e.next();
double y = e.nextDouble();
}}

6
Lecture avec boites de dialogues

import javax.swing.JOptionPane;

public class Test {

public static void main(String[] args) {

String Nom = JOptionPane.showInputDialog("Entre le nom");

}
7
8
3. Les tableaux à une dimension

Un tableau en Java est considéré comme


un objet permettant de rassembler sous
un même identificateur un nombre
fixe de données de même type.

9
Déclaration
Déclarationd’un
d’un
tableau
tableau

La taille n’est pas précisée

La déclaration d’un tableau se fait comme suit :

Type nomTab[ ] ; ou Type[ ] nomTab;

Exemple:

int[] tab1; int tab2[]; Point[] TabP;

10
Création d’un
Création tableau
d’un tableau

La création d’un tableau se fait comme suit :


tab=new Type[taille];

Exemple:
tab= new int[10];
tabP=new Point[20];
// ATTENTION on a créé seulement les
références les points n’ont pas encore été
créés
11
Déclaration et création d’un tableau de 3 entiers

•Déclarer un tableau d’entiers tab ? ?

• int [ ] tab;

• Fixer la taille du tableau et lui allouer de l’espace.


tab= new int [3];
tab

0 0 0

Valeurs par
défaut
12
Déclaration et création d’un tableau de 3 Points

•Déclarer un tableau de Point tab ?


?

Point [ ] tabP;

• Fixer la taille du tableau et lui allouer de l’espace.


tabP= new Point [3];

TP

null null null

Valeurs par
défaut
13
Lecture d’un tableau

Tout tableau est caractérisé par un attribut


length qui donne sa taille. Les éléments du
tableau sont indicés à partir de 0 et sont
initialisés par défaut (un booléen est initialisé
à false, un numérique à 0, une référence à
null…).

14
Lecture d’un tableau d’objets
Exemple:
for (int i=0;tab.length;i++)
tab[i]=e.nextInt();// e est un objet scanner déjà créé.

Avant la saisie

tab 0 0 0

Après la saisie

tab 3 4 5

J’ai saisi:
3, 4, 5
15
Lecture d’un tableau d’objets

Exemple 2:
for (int i=0;tabP.length;i++)
tabP[i]=new Point(lec.nextDouble(), lec.nextDouble());

Avant la saisie

TabP null null null

Après la saisie

TabP

Donnez les
4 4 14 valeurs saisies.

5 -5 15
16
Affichage d’un tableau à l’aide d’un for classique

for (int i=0; i<tab.length;i++)


System.out.println(‘’ ’’+tab[i]);

for (int i=0; i<tabP.length;i++)


tabP[i].affiche();

17
For étendu

for (Type nomElement :nomTableau )

{
// traitement
}

REMARQUE : le for étendu ne permet pas de


modifier le tableau et il parcours le tableau
entièrement Attention aux objets null
18
Affichage d’un tableau à l’aide d’un for étendu

for (int el: tab)


System.out.println(‘’ ’’+el);

Type du tableau
Nom d’un élement Nom du tableau

for (Point p: tabP)


p.affiche();

19
import java.util.Scanner;
public class Application {
public static void main (String [] args){
// créer un objet Scanner

// déclarer un tableau de Point, appelé points

// lisez un entier N
// créer le tableau points avec la taille N
/ remplir points
// afficher les points.

…..}}
20
import java.util.Scanner;
public class Application {
public static void main (String [] args){
Scanner e=new Scanner(System.in) ;
Point []tabP;
System.out.println("Donnez le nombre de points") ;
int N=e.nextInt() ;
tabP=new Point [N] ;

// lecture du tableau
for (int i=0 ; i<N ;i++ ){
System.out.println ("Introduisez les cordonnées du point n°
"+ i) ;
tabP[i]=new Point (e.nextInt(), e.nextInt()) ;
}
// Affichage du tableau for classique
for(int i=0 ;i<tabP.length ;i++ )
tabP[i].affiche () ;}} 21
Initialisation sans new

On peut déclarer un tableau et l’initialiser


directement sans utiliser l’opérateur de
création new.
Exemples :
int[] tab = {3,5,8} permet de créer un tableau de
trois entiers

Point [ ] tabP= {new Point(2,3), new Point (-3,8), null};


permet de créer un tableau de points

22
4. Les tableaux à deux dimension
Une matrice est une généralisation des tableaux à
une dimension et considérée comme un tableau de
tableaux, l'attribut length associé au nom de la
matrice ne permet pas de donner la taille de la
matrice mais seulement le nombre de ses lignes.

Pour déclarer un tableau à deux dimensions, on peut


procéder de deux manières :
La première manière : Allouer la matrice en une
seule fois en précisant les deux dimensions.Voici un
exemple d’illustration :
int [ ] [ ] mat = new int [2] [3]; // crée un
tableau de six éléments entiers
23
La deuxième manière : Allouer d’abord un vecteur
de références vers des tableaux à une dimension ;
ainsi on aura défini un tableau pour référencer les
lignes de la matrice. Puis on alloue (crée) une par une
les lignes de la matrice. Les lignes ne doivent pas avoir
nécessairement la même dimension.

Le même exemple pourrait se réécrire comme suit :


int [ ] [ ] mat;
mat = new int [2] [ ]; // crée deux éléments qui
sont des références
for (i = 0 ; i < mat.length ; i ++)
mat [i] = new int [3] ; // on crée les lignes
une par une
24
Cette technique est intéressante quand on
veut créer des matrices ayant des lignes de
tailles différentes.
Ainsi pour avoir la matrice avec 5 colonnes
sur la première ligne et 8 colonnes sur la 2ème
ligne, on écrira :
int [ ] [ ] mat;
mat = new int [2] [ ];
// crée deux éléments qui sont des références
mat[0] = new int [5] ;
mat[1] = new int [8] ;
25
5. Les Chaines de Caractères

IL EXISTE Trois classes:


String
StringBuilder,
StringBuffer

26
A. La classe String

Cette classe possède deux constructeurs, l’un


sans arguments créant une chaine vide, l’autre
avec un argument de type String qui en crée
une copie.

Exemple :
String ch1=new String () ;
Ou
String ch1=""

27
A. La classe String

String ch2=new String ("Java (") ;


Ou
String ch2="Java "

String ch3=new String (ch2) ;

ou

ch3=ch2 ;
28
Caractéristique des objets
de String

Les objets de la classe String sont immuables :


ils ne peuvent changer de valeur, On a la
possibilité de lire un caractère et non le
modifier. Toute opération permettant de
changer le contenu de la chaine invoque la
création d'une nouvelle chaine.
EXEMPLE : ch = " java “;……..
ch = “POO " java

ch POO

29
Manipulation de chaines de caractères
Concaténation de ceux chaines
La concaténation deux chaines peut se faire soit avec la méthode
concat () ou l’opérateur + ;
T = T+H ; ou T= T.concat(H) ;

Toutefois, bien que la méthode concat ne s’applique


que sur des chaines de caractères, l’opérateur +
peut opérer aussi bien sur des chaines que sur des
numériques.
L’opérateur + entre deux numériques donne un
numérique, mais il produit une chaine dés que l’un
de ses arguments est une chaine.
30
Test d’égalité
Le test d’égalité entre deux chaines avec l’opérateur
== ne permet pas toujours de comparer les
contenus des chaines de caractères. Pour comparer
l’égalité de deux chaines, on doit utiliser la méthode
equals.
String ch1=e.next();// e est un objet scanner
boolean bool= (ch1 == ‘’POO’’); // je saisis POO mais
bool est à false!!!!
String ch1=e.next();// e est un objet scanner
boolean bool=ch1.equals(‘’POO’’); // je saisis POO et
bool est à true!!!!
String ch1=e.next();// e est un objet scanner
boolean bool=ch1.equalsIgnoreCase (‘’ POO’’ )// je
saisis pOo et bool est à true!!!! 31
int x=7;
int y=3;
String z=y+x; // z=10 // ici il s’agit de l’addition

int x=7;
int y=3;
String z=‘’’’+y+x; // z=‘’37’’ // ici il s’agit de
concaténation de caractères

32
L’accès à un élément d’une chaine

L’accès à un élément d’indice i d’une


chaine se fait grâce à la méthode charAt

Exemple
String s = new String(‘’On avance bien ‘’;
char c = s.charAt(6);

33
Comparaison de chaines

La méthode compareTo permet de comparer


deux chaine - comparaison léxicographique –
Elle retourne une valeur = 0 si égalité,
>0 si la chaine >
et <0 si la chaine est <0

34
Conversion d’une chaine à un numérique

Pour convertir une chaine de caractères en un entier,


on utilise la méthode statique parseInt de la classe
enveloppe Integer.

Exemple
String ch = "12" ; int val = Integer.parseInt ( ch);
System.out.println(val+8);

De même, pour convertir une chaine en long, float ou


double, on utilise respectivement les méthodes
parseLong, parseFloat ou parseDouble des classes
Long, Float et Double.
35
Conversion d’un numérique en une
chaine de caractères
Pour convertir un entier en une chaine de caractères, on
utilise trois possibilités:

1. On utilise la méthode valueOf de String comme suit :


String ch = String.valueOf(valeur); // c’est valable pour tout
type de la valeur car cette méthode est surchargée pour
chacun des types.
2. On utilise la méthode toString des classes Integer, Long, Float
ou Double selon la valeur à convertir comme suit :
String ch = Integer.toString(valeur); // de même pour les autres
classes
3. On concatène une chaine (même si elle est vide ) au
nombre. String ch = ""+valeur ;

36
Conversion entre tableau de caractères
et chaine
1. construire une chaine de caractère à partir d’un tableau
de caractères; il suffit d’instancier une chaine avec comme paramètre ce
tableau.
Exemple char mot [] = {‘R’,’E’,’U’,’S’,’S’,’I’,’T’,’E’) ;
String ch = new String (mot) ; // ch est maintenant la chaine
"REUSSITE".
2. De façon symétrique, On peut transformer un objet String
en un tableau de caractères grâce à la méthode toCharArray.
Exemple
String ch="JOIE" ;
char mot[] = ch.toCharArray() ;
REMARQUE Importante:
Pour appliquer le for étendu sur une chaine on doit utiliser la méthode
toCharArray à la chaine car celle-ci n’est pas un tableau 37
Parcours d’une chaine de caractère
Le parcours d’une chaine peut se faire de deux manières
1. En utilisant la méthode charAt
Exemple si on veut afficher tous les caractères numériques d’une
chaine,
on aura le code suivant :
for( int i=0 ; i<ch.length() ;i++)
if((ch.charAt(i)<='9')&& (ch.charAt(i)>='0'))
System.out.print( ch.charAt(i) ) ;

2. En transformant la chaine en un tableau de


caractère
Le code suivant répond à l’énoncé précédent :
for(char e :ch.toCharArray())
if( e<='9' && e>='0')
System.out.print(e);
38
Exercice

1. Ecrire un programme qui permet de lire


N chaines et les imprime en déterminant
pour chacune le nombre de caractère $.

39
class Programme {
public static void main (String [] args) {
Scanner sc = new Scanner (System.in) ;
String H ; int cpt,
int N = sc.nextInt() ;
for(int i =0;i<N;i++)
{ H= sc.next() ; cpt = 0;

for (int j=0 ; j< H.length();j++)


if (H.charAt[j] =='$' ) cpt++ ;

System.out.println( ''La chaine est ''+ H + '' Le


nb de $ = '' + cpt); } }}
40
2. Modifier le programme si l'arrêt se fait à la rencontre d'une
chaine spéciale ’’fin’’, l'utilisateur peut donner toute chaine
en majuscule ou minuscule.
import java.util.Scanner
class Programme {
public static void main (String [] args) {
Scanner e = new Scanner (System.in) ;
String H ; int cpt,
while (true) {
H= e.next() ;
if ( H.lowercase().equals(''fin'') ) break;
cpt = 0;
for ( int j=0 ; j< H.length();j++)
if (H.charAt[j] =='$’) cpt++;
System.out.println (‘‘La chaine est ''+ H + '' Le nb de $ = '' +
cpt);
}}}
41
Signature de la méthode Description
public String() Constructeur
public String(String s) Constructeur
public int length() Longueur de la chaîne
public char charAt(int index) Retourne le caractère à la position index
public String substring(int dbt,int fin) Extrait la chaîne entre les positions dbt et fin
public boolean equals(Object o) Test d’égalité
public boolean
equalsIgnoreCase(String s) Test d'égalité en ignorant la casse
public boolean startsWith(String s) Test si chaîne s est égale au début de la chaîne
public boolean endsWith(String s) Test si chaîne s est égale à la fin de la chaine
public int compareTo(String s) Compare les 2 chaînes,(0 si égalité, <0 si elle est
inférieure, >0 sinon)

42
Signature de la méthode Description

public int indexOf(char c) Retourne la position du caractère c dans la


public int lastIndexOf(char c) chaîne Retourne la dernière position du
caractère c
public int indexOf(char c, int i) Retourne la position de c à partir de i
public int indexOf(String s) Retourne la position de la sous-chaîne s
public String replace(char c,char d) Remplace toute occurrence de c par d
public String toLowerCase() Convertit la chaine en minuscules
public String toUpperCase() Convertit la chaine en majuscules
public char[] toCharArray() Convertit la chaîne en tableau de caractères
public String trim() Supprime les espaces en début et fin de la
chaîne
public static String valueOf(char t[]) Convertit un tableau de caractères en String
43
Chaîne formatée

On veut définir des matricules sur 12


caractères on utilise la méthode format de
String
String mat = ""+ new Date().getYear()+
String.format("%08d", num) ;
Exemple 201400000001
201400002222
201500000001

44
B. La classe StringBuffer

Cette classe a été introduite pour palier aux inconvénients de


la classe String pour donner la possibilité de modifier le
contenu d’une chaîne sans en créer d’autres instances, la classe
StringBuffer appartient au paquetage java.lang
ainsi, cette classe possède des méthodes permettant de
modifier la chaine sans créer de zones temporaires.

Cependant, dans cette classe on ne peut concaténer les


chaines avec l'opérateur + ni avec concat mais une nouvelle
méthode append qui permet de de réaliser les ajouts.

De plus on ne peut créer une chaine directement mais on


doit passer explicitement par l'opérateur new.
StringBuffer H = ''java''; ERREUR
StringBuffer H= new StringBuffer (''java''); CORRECT 45
B. La classe StringBuffer

Remarque : L’utilisation de cette classe permet un


gain considérable de temps quand il s’agit de
modifications répétitives de la chaine

Cependant, les méthodes de cette classes sont


synchronisées afin d’être utilisées par des processus
parallèle (plusieurs thread sur une même chaine).

Ceci influe sur le temps d’exécution ( perte de temps )


dans le cas d’absence de parallélisme
( un seul processus ou thread)

46
B. La classe StringBuilder

La classe StringBuilder est comme la classe


StringBuffer mais a été conçue pour un
accès séquentiel à une chaine.
Elle présente les meilleurs temps quand il
s’agit de modifier une chaine dans le cas de
mono-threding.

47
6. Les Types énumérés

On sait jusqu’à présent qu’une classe permet de


créer un nombre infini d’objets.

Il existe des classes qui doivent avoir qu’un nombre


fini et constant d’objets

Exemple : les jours de semaine, les mois de l’année,


les spécialités d’une formation…

La question qui s’impose : Comment représenter ces


éléments?

48
On prend l’exemple des mois de l’année.
1. En représentant les mois par une classe ordinaire Année :
c’est faux car on pourrait créer plus de 12 mois
Mois m = new Mois (….); on peut créer une infinité de
mois.

2. En représentant les mois par un String : String mois


c’est faux car on ne pourrait faire rentrer un nom de mois
non correct ‘’BONJOUR ‘’;

3. En représentant les mois par 12 constantes de type String :


c’est correct mais lourd, on devrait comparer chaque chaine
correspondante à un mois par les différentes constantes
jusqu’à retrouver la bonne chaine, de plus si on veut rajouter
des informations supplémentaires aux mois, on va encombrer
notre base d’information de chaines répétées
(Consommation inutile d’espace) 49
•A partir de la version 5 de java, une solution a été
proposée par la communauté scientifique,

•il s’agit de définir une classe spéciale composée d’un


nombre fini et fixe d’objets appelée énumération.

•Un type énuméré permet de définir un ensemble


objets constants

•définissant ainsi des types de données personnalisés


tels que les jours de la semaine, les mois de l’année, le
statut social d’une personne…

•Chaque élément d’une énumération est un objet à


part entière. 50
Cette structure permet de contenir une série de
données constantes ayant un type sûr ( safe type)
Le contrôle par rapport aux valeurs de l’énumération
est implicite.

Dans le langage java, une énumération est introduite


par le mot enum au lieu de class.

51
A. Définition d’un type énuméré:
(forme minimale d’une énumération)
enum NomEnumération
{ objet1, objet2, …., objetn }
Exemples
enum Animal { KANGOUROU, TIGRE, CHIEN,
SERPENT, CHAT}
enum Saison { HIVER, PRINTEMPS, ETE, AUTOMNE
}
enum Spécialité_Master { MIL, RSD, SII, SSI,CP}
enum Mois {JANVIER, FÉVRIER, MARS, AVRIL, MAI,
Juin, JUILLET, AOUT, SEPTEMBRE, OCTOBRE,
NOVEMBRE, DECEMBRE}
52
Remarque : les éléments de l’énumération sont des
objets spécifiques et non chaines de caractères.

2. Méthodes pour la manipulation de types


énumérés
Il est possible de comparer des valeurs d'une
énumération entre elles à l'aide des opérateurs de
comparaison == et aussi l’utilisation de l'instruction
switch.
De plus les quatre méthodes suivantes sont liées à
toute énumération créée :

53
• Premiere méthode : valueOf est une méthode
statique dont
• la signature est nomEnum valueOf(String)
exemple Mois.valueOf(String),
Cette méthode retourne l’objet correspondant à la
chaine de caractère donnée en paramètre,

si aucun objet ne correspond à cette chaine,


une exception est générée.

Il s’agit de faire correspondre la chaine de caractère


introduite par l’utilisateur set l’objet énumération
correspondant.
String ch= sc.next();
Exemple Mois m = Mois.valueOf(ch); 54
Si on introduit les chaines hhh ou janvier ou Janvier
une exception sera déclenchée .
Par contre si on introduit JANVIER le code est
correct.

Pour pallier au problème de la sensibilité à la casse,

on propose de donner des noms majuscules aux objets


d’une énumération et réaliser la conversion de la
chaine quand on invoque La méthode valueOf
M = Mois.valueOf(ch. toUpperCase()) ;

55
• Seconde méthode : toString () cette méthode fait
le travail inverse, elle transforme l’objet d’une
énumération en chaine de caractères

•Troisième méthode : values() : elle regroupe


tous les objets de l’énumération dans un tableau de
valeur afin qu’on puisse réaliser un parcours sur ses
éléments.
Exemple :
a/ for (Mois m: Mois.values()) // parcourir les
éléments de l’énumération
System.out.println (m) ;

56
b/ String ch = sc.next() ;
boolean chaineAccptée = false ;
for (Mois m:Mois.values())
{ if (ch. equalsIgnoreCase (m.toString() )
{chaineAacceptée = true; break;}

•Quatrième méthode : ordinal (): renvoie le


numéro d’ordre d’un objet dans l’énumération,
•La numérotation commence à partir de 0, ainsi
Mois.FEVRIER donne la valeur 1.
•Mois.DECEMBRE donne la valeur 11

57
enum SpécialitéMaster { MIL, RSD, SII, SSI,CP;
void présRequis(){
System.out.print("Prérequis : ");
switch ( this){
case MIL :
System.out.println( " Java+UML ") ; break ;
case RSD :
System.out.println( " Système + Réseau ");
break;
case SII :
System.out.println("Math + algorithmique“);
break ;
case SSI :
System.out.println( "Réseau + Math ");
}}
58
Remarque : on aurait pu le faire comme
suit :
void présRequis(){

System.out.print("Prérequis : ");
switch ( ordinal()){
case 0 :System.out.println( " Java+UML ") ;
break ;
case 1 :
System.out.println( " Système + Réseau ");
break;
case 2 :
System.out.println("Math + algorithmique");
break ;
case 3 :
System.out.println( "Réseau + Math ");
}}
59
B/ La forme énumération avec
constructeur
Dans une classe déclarée enum, il est possible des
rajouter des informations aux constantes de
l’énumération, il s’agit des caractéristique de chacun
des objets

Dans ce cas, la définition des attributs et


constructeur devient obligatoire. Le constructeur est
obligatoirement privé car aucune nouvelle instance
ne peut être créée.

On a aussi la possibilité de définir d’autres méthodes60


enum NomEnumération
{ obj1(v1, x1,…), obj2(v2,x2..), …., objn(vn,xn)…
// Définition des attributs éventuellement
Type1 attribut1 ;
….
// Constructeur
NomEnumération(paramètres) { … }

// Définition des méthodes éventuellement


Type1 méthode1 (paramètres) { …} …. } ;

61
enum SpécialitéMaster{ MIL(12, “GénieLogicie”),
RSD ( 15,“Réseaux et System”), SII ( 16,
“Intelligence Artificielle”), SSI ( 10, “ Sécurité”, CP
( 12, “calcul parallèl”);

private int nbMod;


private String “ intitulé”;

SpécialitéMaster( int nbMod, String intitulé) {


this.nbMod = nbMod;
this.intitulé = intitulé; }

int nbModules() { return nbMod;}


}
62
class Etudiant {
private String nom, prénom, adresse;
private SpécialitéMaster spec;
private float note1, note2

public Etudiant ( String n, String p String a , String s){


nom = n; prénom = p ; adresse = a;
spec = SpécialitéMaster.valueOf(s.toUpperCase());
// Attention on risque une exception si la chaîne ne
correspond pas
// on traitera ce type d’erreur plus tard
………………..
}

63
7. Les Boites de Dialogues

64
7. Les Boites de Dialogues
Exemple:
JOptionPane.showMessageDialog(null, "Message d'information",
"Information", JOptionPane.INFORMATION_MESSAGE);

Le premier argument est le JComponent


parent. C'est à dire le composant au dessus du
quel devra s'ouvrir la fenêtre.
S'il y en a pas comme ici, on met null.
On aurait cependant pu mettre this pour
centrer la boite de dialogue au dessus du
content pane,
même si la fenêtre principale avait été
déplacée.
65
6. Les Boites de Dialogues

Le second argument est le message que l'utilisateur


verra dans la boite de dialogue.

Le troisième est le titre de la boite de dialogue,


affiché dans la barre d'action Et le dernier est celui
qui définira s'il s'agit d'un message d'information,
d'erreur ou d'avertissement. D'ailleurs il est possible
de simplement mettre un message, sans icône, à
l'aide de JOptionPane.PLAIN_MESSAGE,
ou alors une question avec
JOptionPane.QUESTION_MESSAGE.

66
67
68

Vous aimerez peut-être aussi