SAE21_2021/plateau.java

509 lines
17 KiB
Java
Raw Normal View History

2022-05-05 22:45:26 +02:00
//Tom Monin et Clément Martins
//Class pour des fonction static de jeu
//V2
import java.io.*;
import java.util.*;
import java.awt.event.*;
import java.io.ObjectOutputStream;
import java.awt.*;
import javax.swing.*;
public class plateau{
private paintMenuJeu logo;
private JFrame fenetre;
private observateurSAV observateur;
private int ligne, collonne, bombe;
private paintMenuJeu[] tabScore= new paintMenuJeu[3];
private Case[][] tableau;
public plateau(JFrame fenetre0){
this.fenetre=fenetre0;
this.ligne=-1;
this.collonne=-1;
2022-05-11 20:31:30 +02:00
this.bombe=-1;
2022-05-05 22:45:26 +02:00
}
2022-05-11 20:31:30 +02:00
//-------------------> Debut Seter et Getteur <-------------------------
2022-05-05 22:45:26 +02:00
public void setLogo(paintMenuJeu logo0){
this.logo=logo0;
}
public void setObservateur(observateurSAV observateur0){
this.observateur=observateur0;
}
public int getLigne(){
return this.ligne;
}
public int getCollonne(){
return this.collonne;
}
public int getBombe(){
return this.bombe;
}
public JFrame getFenetre(){
return this.fenetre;
}
public void setCollonne(int n){
this.collonne=n;
}
public void setLigne(int n){
this.ligne=n;
}
public void setBombe(int n){
this.bombe=n;
}
2022-05-11 20:31:30 +02:00
//-------------------------> fin Setter et Getteur <-----------------------------
2022-05-05 22:45:26 +02:00
//-------------------------Fonction plaçant les bombes aléatoirement------------------------
private void setAllBombe(){
Random rand = new Random();
//on répète le nombre de fois le nombre de bombe a placer
for(int i=0; i<this.bombe; i++){
//on genere 2 chiffre aléatoire(ligne et collonne)
int x=rand.nextInt(this.ligne);
int y=rand.nextInt(this.collonne);
//si il n'y a pas de bombe ici
if(this.tableau[x][y].getBombe()==false){
//on en place une
this.tableau[x][y].setBombe();
}else{
//autrement nous recomencerons 1 fois de plus le tirage pour ne pas modifier le nombre de bombe
i--;
}
}
}
//-------------------------Fonction mettant le nombre de bombe voisin a chaque Case------------------
public void setAllVoisin(){
//nous parcourons le tableau du jeu
for(int i=0; i<this.tableau.length; i++){
for(int t=0; t<this.tableau[i].length; t++){
int voisin=0;
//nous regardons dans les cases adjacentes(si elles existe) si elle sont des bombes
if(i>0){
if(this.tableau[i-1][t].getBombe()==true){
//si elle le sont alors nous augmentons le nombre de voisin
voisin++;
}
if(t>0){
if(this.tableau[i-1][t-1].getBombe()==true){
voisin++;
}
}
if(t<this.tableau[i].length-1){
if(this.tableau[i-1][t+1].getBombe()==true){
voisin++;
}
}
}
if(i<this.tableau.length-1){
if(this.tableau[i+1][t].getBombe()==true){
voisin++;
}
if(t>0){
if(this.tableau[i+1][t-1].getBombe()==true){
voisin++;
}
}
if(t<this.tableau[i].length-1){
if(this.tableau[i+1][t+1].getBombe()==true){
voisin++;
}
}
}
if(t>0){
if(this.tableau[i][t-1].getBombe()==true){
voisin++;
}
}
if(t<this.tableau[i].length-1){
if(this.tableau[i][t+1].getBombe()==true){
voisin++;
}
}
//finalement nous mettons pour cette case sont nombre de voisin
this.tableau[i][t].setVoisin(voisin);
}
}
}
//-------------------------------Fonction qui verifie l'etat de jeu(perdu, gagner)------------------------
public int etatDeVictoire(){
//variable pour une condition
int condition=0;
//nous parcourons le tableau du jeu
for(int i=0; i<this.tableau.length; i++){
for(int t=0; t<this.tableau[i].length; t++){
//si une case n'est pas visible mais que ce n'est pas une bombe
if(this.tableau[i][t].getVisibiliter()==false && this.tableau[i][t].getBombe()==false){
//nous augmentons la conditions pour montrer que la partie est toujour en cours
condition++;
}
//si une bombe est visible
if(this.tableau[i][t].getVisibiliter()==true && this.tableau[i][t].getBombe()==true){
2022-05-06 16:16:25 +02:00
// le joueur a perdu
this.removeListener();
this.perdu();
2022-05-05 22:45:26 +02:00
//on retourne une valeur représentant la défaite: -1
return -1;
}
//si une bombe n'est pas susposer comme tel
if(this.tableau[i][t].getSuspition()!=1 && this.tableau[i][t].getBombe()==true){
//nous augmentons la conditions pour montrer que la partie n'est pas fini
condition++;
}
}
}
//si la partie n'est pas fini
if(condition>0){
//on retourne 0 ici comme une valleur null
return 0;
}
2022-05-06 16:16:25 +02:00
// le joueur a gagner
this.removeListener();
this.gagner();
2022-05-05 22:45:26 +02:00
//sinon le joueur a donc gagner on renvoie 1
return 1;
}
//-----------------------------------Fonction après victoire/defaite pour enlever les observateur a chaque Case--------------------------------
2022-05-06 16:16:25 +02:00
private void removeListener(){
2022-05-05 22:45:26 +02:00
//on parcour le tableau du jeu
2022-05-06 16:16:25 +02:00
for(int i=0; i<this.tableau.length; i++){
for(int t=0; t<this.tableau[i].length; t++){
2022-05-05 22:45:26 +02:00
//on récupere le tableau d'observateur
MouseListener[] tabListener;
2022-05-06 16:16:25 +02:00
tabListener=this.tableau[i][t].getMouseListeners();
2022-05-05 22:45:26 +02:00
//que nous parcourons
for(int longeur=0; longeur<=tabListener.length-1; longeur++){
//on enleve a chaque case les observateur 1 par 1
2022-05-06 16:16:25 +02:00
this.tableau[i][t].removeMouseListener(tabListener[longeur]);
2022-05-05 22:45:26 +02:00
}
}
}
}
2022-05-06 16:16:25 +02:00
//-------------------------------------Fonction des modification a faire si le joeur a perdu-------------------------------------
private void perdu(){
//on modifie l'affichage du menu du haut par le choix 5(tete rouge)
2022-05-05 22:45:26 +02:00
for(int i=0; i<tabScore.length; i++){
this.tabScore[i].setChoix(5);
}
2022-05-06 16:16:25 +02:00
//puis nous affichons toutes les case pour que le joueur puisse voir la grille
for(int i=0;i<this.tableau.length;i++){
for(int t=0;t<this.tableau[i].length;t++){
this.tableau[i][t].setVisibiliter(true);
this.tableau[i][t].repaint();
}
}
//enfin nous affichons le logo rejouer
this.paintLogo();
2022-05-05 22:45:26 +02:00
}
2022-05-06 16:16:25 +02:00
//-------------------------------------Fonction des modification a faire si le joeur a gagner-------------------------------------
private void gagner(){
//on modifie l'affichage du menu du haut par le choix 6(tete vert)
2022-05-05 22:45:26 +02:00
for(int i=0; i<tabScore.length; i++){
this.tabScore[i].setChoix(6);
}
2022-05-06 16:16:25 +02:00
//nous affichons le logo rejouer
this.paintLogo();
2022-05-05 22:45:26 +02:00
}
2022-05-06 16:16:25 +02:00
//-------------------------------------Fonction pour modifier le Score des bombes restantes--------------------------------------
2022-05-05 22:45:26 +02:00
public void setScore(int n){
2022-05-06 16:16:25 +02:00
//on parcoure le menu du haut avec le score et nous lui ajoutons l'entier entrée dans l'apel
2022-05-05 22:45:26 +02:00
for(int i=0; i<tabScore.length; i++){
2022-05-06 16:16:25 +02:00
tabScore[i].setScore(tabScore[i].getScore()+n);
}
2022-05-05 22:45:26 +02:00
}
2022-05-06 16:16:25 +02:00
//------------------------------------> Fonction pour afficher le logo rejouer <----------------------------
private void paintLogo(){
//on modifie l'aspect de l'ancien logo
2022-05-05 22:45:26 +02:00
this.logo.setChoix(7);
2022-05-06 16:16:25 +02:00
//et la fonction de son observateur
2022-05-05 22:45:26 +02:00
this.observateur.setFonction(true);
}
2022-05-06 16:16:25 +02:00
//------------------------------------> Fonction pour lancer une nouvelle partie <-----------------------
2022-05-05 22:45:26 +02:00
public void newGame(){
2022-05-06 16:16:25 +02:00
//initialisation du tableau de Case
2022-05-05 22:45:26 +02:00
this.tableau=new Case[ligne][collonne];
for(int i=0; i<ligne; i++){
for(int t=0; t<collonne; t++){
this.tableau[i][t]= new Case();
2022-05-11 20:31:30 +02:00
this.tableau[i][t].setPreferredSize(new Dimension(50,50));
2022-05-05 22:45:26 +02:00
//nous ajoutons aussi a chaque case son observateur de case
}
}
//nous disposons les bombe dans le jeu
this.setAllBombe();
//maitenant que les bombe sont mise nous pouvons modifier le nombre de voisin des cases
this.setAllVoisin();
2022-05-06 16:16:25 +02:00
//on lance la partie avec le tableau de Case initialiser et le nombre de bombe en score(aucune Case n'est encore suspecter)
2022-05-05 22:45:26 +02:00
this.launchGame(this.bombe);
}
2022-05-06 16:16:25 +02:00
//------------------------------------> Fonction pour sauvegarder la partie <-------------------------
2022-05-11 20:31:30 +02:00
/*
Mettre les bloc try catch au bon endroit
*/
2022-05-05 22:45:26 +02:00
public void save(){
2022-05-06 16:16:25 +02:00
//les fonctions vont lever des Exeption nous devons donc mettre un try Catch
2022-05-05 22:45:26 +02:00
try{
2022-05-06 16:16:25 +02:00
//nous initialison le outputStream en créant le fichier "sauvegarde.data"
2022-05-05 22:45:26 +02:00
FileOutputStream sav = new FileOutputStream(new File("sauvegarde.data"));
2022-05-11 20:31:30 +02:00
try{
//nous allons sérialiser le tableau de Case
ObjectOutputStream oos = new ObjectOutputStream(sav);
//nous écrivons donc tout d'abord la taille de celui-ci
oos.writeInt(this.ligne);
oos.writeInt(this.collonne);
//puis nous parcourons le tableau en sérialisant toute les Case
for(int i=0; i<this.ligne; i++){
for(int t=0; t<this.collonne; t++){
oos.writeObject(this.tableau[i][t]);
}
2022-05-19 11:23:05 +02:00
}
//nous écrivons ensuite le score Maximum(nombre de bombe) pour éviter de regarder toutes les Case plus tard
oos.writeInt(this.tabScore[0].getScoreMax());
//puis le score a l'instant T
oos.writeInt(this.tabScore[0].getScore());
//nous fermons la sauvegardes
try{
oos.close();
}catch(IOException e){
JOptionPane.showMessageDialog(this.fenetre, "erreur lors de l'ecriture final de la sauvegarde");
this.fenetre.dispose();
}
}catch(IOException e){
JOptionPane.showMessageDialog(this.fenetre, "erreur lors de l'ecriture de la sauvegarde");
this.fenetre.dispose();
}
}catch(FileNotFoundException e1){
JOptionPane.showMessageDialog(this.fenetre, "erreur impossible d'accèder au fichier de sauvegarde");
this.fenetre.dispose();
2022-05-05 22:45:26 +02:00
}
2022-05-06 16:16:25 +02:00
//nous fermons la fenetre et donc arrêtons l'applications
2022-05-05 22:45:26 +02:00
this.fenetre.dispose();
}
2022-05-06 16:16:25 +02:00
public void reprendrePartie(FileInputStream file){
//initialisation de la variable score
2022-05-05 22:45:26 +02:00
int score=0;
2022-05-06 16:16:25 +02:00
//les fonctions vont lever des Exeption nous devons donc mettre un try Catch
2022-05-05 22:45:26 +02:00
try{
2022-05-06 16:16:25 +02:00
//initialisation des collonnes avec le fichier
2022-05-11 20:31:30 +02:00
try{
//création de l'objet pour lire le fichier donner
ObjectInputStream ois = new ObjectInputStream(file);
this.ligne=ois.readInt();
this.collonne=ois.readInt();
//on crée le tableau de Case avec les bonnes dimention
this.tableau=new Case[this.ligne][this.collonne];
//on parcoure celui-ci et remettons les Case avec la sauvegarde
for(int i=0; i<ligne; i++){
for(int t=0; t<collonne; t++){
this.tableau[i][t]=(Case) ois.readObject();
}
2022-05-19 11:23:05 +02:00
}
//nous initialison maintenant le nombre de bombe
this.bombe=ois.readInt();
//puis le score
score=ois.readInt();
try{
ois.close();
//nous pouvons maintenant lancer la partie sauvegarder
2022-05-19 11:32:24 +02:00
this.launchGame(score);
2022-05-19 11:23:05 +02:00
}catch(IOException e){
JOptionPane.showMessageDialog(this.fenetre, "fichier de sauvegarde corompu");
this.menuChoixTypePartie();
}
}catch(IOException e2){
JOptionPane.showMessageDialog(this.fenetre, "fichier de sauvegarde corompu");
this.menuChoixTypePartie();
2022-05-05 22:45:26 +02:00
}
}catch(ClassNotFoundException e3){
2022-05-19 11:23:05 +02:00
JOptionPane.showMessageDialog(this.fenetre, "fichier de sauvegarde corompu");
this.menuChoixTypePartie();
}catch(Exception e){
JOptionPane.showMessageDialog(this.fenetre, "fichier de sauvegarde imcomplet");
this.menuChoixTypePartie();
2022-05-05 22:45:26 +02:00
}
}
2022-05-06 16:16:25 +02:00
//----------------------------------------> Fonction pour Lancer une partie <--------------------------------------
2022-05-05 22:45:26 +02:00
private void launchGame(int score){
2022-05-06 16:16:25 +02:00
//on ferme l'ancienne fenetre
2022-05-05 22:45:26 +02:00
this.fenetre.dispose();
2022-05-06 16:16:25 +02:00
//on en crée une nouvelles
2022-05-05 22:45:26 +02:00
this.fenetre=new JFrame("démineur");
2022-05-06 16:16:25 +02:00
// l'application se fermera que si on ferme la fenetre
this.fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//on l'affiche
this.fenetre.setVisible(true);
//on ajoute son observateur (pour savegarder la partie si on ferme la fenetre)
this.fenetre.addWindowListener(new observateurFenetre(this));
2022-05-09 16:19:50 +02:00
this.fenetre.setBackground(new Color(0,0,0));
JPanel panJeu = new JPanel();
JPanel panMenu = new JPanel();
panJeu.setBackground(new Color(0,0,0));
panMenu.setBackground(new Color(0,0,0));
2022-05-06 16:16:25 +02:00
//on met un gestionaires de mise en page grille avec le nombre de ligne+1 (pour le menu en haut) et le nombre de collonne
2022-05-09 16:19:50 +02:00
panJeu.setLayout(new GridLayout(this.ligne,this.collonne));
2022-05-11 20:31:30 +02:00
panMenu.setLayout(new GridLayout(1, 15));
2022-05-06 16:16:25 +02:00
//on met en place le menu du haut et donc toute la première ligne
2022-05-11 20:31:30 +02:00
for(int i=0; i<15; i++){
2022-05-05 22:45:26 +02:00
paintMenuJeu menu= new paintMenuJeu(0, score, bombe);
2022-05-06 16:16:25 +02:00
//nous mettons des dimensions convenable pour des Case
2022-05-09 16:19:50 +02:00
menu.setPreferredSize(new Dimension(50,50));
2022-05-06 16:16:25 +02:00
//les 3 premières case serons consacrés au score
2022-05-05 22:45:26 +02:00
if(i==0){
this.tabScore[0]=menu;
menu.setChoix(1);
}
if(i==1){
this.tabScore[1]=menu;
menu.setChoix(2);
}
if(i==2){
this.tabScore[2]=menu;
menu.setChoix(3);
}
2022-05-06 16:16:25 +02:00
//et la derniere au logo
2022-05-11 20:31:30 +02:00
if(i==14){
2022-05-05 22:45:26 +02:00
menu.setChoix(4);
this.setLogo(menu);
observateurSAV observateur=new observateurSAV(menu, this);
menu.addMouseListener(observateur);
this.setObservateur(observateur);
}
2022-05-06 16:16:25 +02:00
//sinon le composant sera juste sobre
2022-05-09 16:19:50 +02:00
panMenu.add(menu);
2022-05-05 22:45:26 +02:00
}
2022-05-06 16:16:25 +02:00
//on ajoute ensuite toutes les Case a la fenetre
2022-05-05 22:45:26 +02:00
for(int i=0; i<ligne; i++){
for(int t=0;t<collonne; t++){
2022-05-09 16:19:50 +02:00
panJeu.add(this.tableau[i][t]);
2022-05-05 22:45:26 +02:00
this.tableau[i][t].addMouseListener(new observateurCase(i, t, this.tableau, this));
}
}
2022-05-09 16:19:50 +02:00
this.fenetre.add(panMenu, BorderLayout.NORTH);
this.fenetre.add(panJeu, BorderLayout.CENTER);
2022-05-06 16:16:25 +02:00
//on ajuste la taille de la fenetre a son contenu
2022-05-05 22:45:26 +02:00
this.fenetre.pack();
}
2022-05-06 16:16:25 +02:00
//---------------------> Fonction d'affichage du menu pour le Choix des Ligne, Collonne et Bombe <-----------------------------
2022-05-05 22:45:26 +02:00
public void menuChoixLCB(){
2022-05-06 16:16:25 +02:00
//nous fermons l'ancienne fenetre
2022-05-05 22:45:26 +02:00
this.fenetre.dispose();
2022-05-06 16:16:25 +02:00
//créons une nouvelle
2022-05-05 22:45:26 +02:00
this.fenetre= new JFrame("démineur");
this.fenetre.setLocation(0,0);
2022-05-09 16:19:50 +02:00
this.fenetre.setSize(1600, 1000);
2022-05-05 22:45:26 +02:00
this.fenetre.setVisible(true);
this.fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
2022-05-06 16:16:25 +02:00
//nous utiliserons un gestionnaires avec 27 ligne(de 4 a 30 ligne/collonne) et 3 collonne
fenetre.setLayout(new GridLayout(27,3));
//initialisation des objet utiliser par des observateur plus tard
2022-05-05 22:45:26 +02:00
paintChoix retenue= new paintChoix(-1, -1);
paintChoix premier= new paintChoix(-1, -1);
paintChoix retenue2= new paintChoix(-1, -1);
paintChoix premier2= new paintChoix(-1, -1);
JLabel texte1 = new JLabel("ligne: ???");
JLabel texte2 = new JLabel("collonne: ???");
2022-05-06 16:16:25 +02:00
//aligment Central plus estetique
2022-05-05 22:45:26 +02:00
texte1.setHorizontalAlignment(JLabel.CENTER);
texte2.setHorizontalAlignment(JLabel.CENTER);
2022-05-09 16:19:50 +02:00
JTextField nbombe = new JTextField("????");
2022-05-06 16:16:25 +02:00
//nous ajoutons les Case
2022-05-05 22:45:26 +02:00
for(int i=0; i<27; i++){
2022-05-06 16:16:25 +02:00
//creons les composant
2022-05-05 22:45:26 +02:00
paintChoix pinceau = new paintChoix(i, 1);
paintChoix pinceau2 = new paintChoix(i, 2);
if(i==0){
2022-05-06 16:16:25 +02:00
//si c'est la première Case alors ça sera la première pour sa ligne
2022-05-05 22:45:26 +02:00
premier=pinceau;
premier2=pinceau2;
}
2022-05-06 16:16:25 +02:00
//nous leurs ajoutons un observateur
2022-05-05 22:45:26 +02:00
pinceau.addMouseListener(new observateurChoix(pinceau, premier, texte1, this));
pinceau2.addMouseListener(new observateurChoix(pinceau2, premier2, texte2, this));
2022-05-06 16:16:25 +02:00
//positionons la retenue sur le nouveau pinceau
2022-05-05 22:45:26 +02:00
retenue.setPaintChoix(pinceau);
retenue=pinceau;
retenue2.setPaintChoix(pinceau2);
retenue2=pinceau2;
2022-05-06 16:16:25 +02:00
//nous ajoutons la première case sur la collonne 1
2022-05-05 22:45:26 +02:00
this.fenetre.add(pinceau);
2022-05-06 16:16:25 +02:00
//la dexième collonne dependra de sa hauteur dans la ligne
2022-05-05 22:45:26 +02:00
if(i==10){
2022-05-06 16:16:25 +02:00
//texte sur les lignes
2022-05-05 22:45:26 +02:00
this.fenetre.add(texte1);
}
if(i==12){
2022-05-06 16:16:25 +02:00
//texte sur les collonnes
2022-05-05 22:45:26 +02:00
this.fenetre.add(texte2);
}if(i==26){
2022-05-06 16:16:25 +02:00
//si c'est la dernière ligne, boutons valider
2022-05-05 22:45:26 +02:00
JButton valider = new JButton("valider");
2022-05-19 11:23:05 +02:00
valider.addActionListener(new observateurButtonEtText(this, 2, nbombe, this.fenetre));
2022-05-05 22:45:26 +02:00
this.fenetre.add(valider);
}if(i==17){
2022-05-06 16:16:25 +02:00
//boutons plus
2022-05-05 22:45:26 +02:00
JButton plus = new JButton("+");
plus.addActionListener(new plusoumoins(nbombe, 1, this));
this.fenetre.add(plus);
}if(i==18){
2022-05-06 16:16:25 +02:00
//texteArea qui représente le nombre de bombe
2022-05-05 22:45:26 +02:00
nbombe.setHorizontalAlignment(JLabel.CENTER);
2022-05-19 11:23:05 +02:00
nbombe.addActionListener(new observateurButtonEtText(this, 1, nbombe, this.fenetre));
2022-05-05 22:45:26 +02:00
this.fenetre.add(nbombe);
}if(i==19){
2022-05-06 16:16:25 +02:00
//boutons moins
2022-05-05 22:45:26 +02:00
JButton moins = new JButton("-");
moins.addActionListener(new plusoumoins(nbombe, -1, this));
this.fenetre.add(moins);
}if(i==16){
2022-05-06 16:16:25 +02:00
//juste le texte
2022-05-05 22:45:26 +02:00
JLabel texte3 = new JLabel("Nombre de Bombe");
texte3.setHorizontalAlignment(JLabel.CENTER);
this.fenetre.add(texte3);
2022-05-06 16:16:25 +02:00
}if(i!=10 && i!=12 && i!=26 && i!=17 && i!=18 && i!=19 && i!=16){
//autrement nous ajoutons un composant inutile
this.fenetre.add(new JLabel());
2022-05-05 22:45:26 +02:00
}
2022-05-06 16:16:25 +02:00
//enfin nous ajoutons sur la 3ième collonne le 2ième paintChoix
2022-05-05 22:45:26 +02:00
this.fenetre.add(pinceau2);
}
}
2022-05-06 16:16:25 +02:00
//-----------------------------------------> Fonction pour l'affichage du premier menu (nouvelle partie/reprendrePartie/quitter) <---------------------
2022-05-05 22:45:26 +02:00
public void menuChoixTypePartie(){
2022-05-06 16:16:25 +02:00
//nous créons une nouvelles fenetre
2022-05-05 22:45:26 +02:00
this.fenetre.dispose();
this.fenetre= new JFrame("démineur");
this.fenetre.setLocation(0,0);
2022-05-09 16:19:50 +02:00
this.fenetre.setSize(1600, 1000);
2022-05-05 22:45:26 +02:00
this.fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
2022-05-06 16:16:25 +02:00
this.fenetre.setLayout(new FlowLayout());
JPanel pan1 = new JPanel();
JPanel pan2 = new JPanel();
JPanel pan3 = new JPanel();
2022-05-05 22:45:26 +02:00
JButton nouveau = new JButton("nouvelle partie");
JButton reprende = new JButton("reprendrePartie");
JButton quitter = new JButton("quitter");
2022-05-19 11:23:05 +02:00
nouveau.addActionListener(new observateurButtonEtText(this, 3, null, this.fenetre));
reprende.addActionListener(new observateurButtonEtText(this, 4, null, this.fenetre));
quitter.addActionListener(new observateurButtonEtText(this, 5, null, this.fenetre));
2022-05-06 16:16:25 +02:00
pan1.add(nouveau);
pan2.add(reprende);
pan3.add(quitter);
this.fenetre.add(pan1);
this.fenetre.add(pan2);
this.fenetre.add(pan3);
2022-05-19 12:33:51 +02:00
this.fenetre.setVisible(true);
2022-05-05 22:45:26 +02:00
}
2022-05-09 09:28:48 +02:00
}