SAE21_2021/observateurButtonEtText.java

173 lines
6.5 KiB
Java
Raw Permalink Normal View History

2022-05-25 10:27:01 +02:00
//Clément Martins et Tom Monin
//Class utiliser pour observateur avec plusieur action possible (en fonction de sa fonction défini a la création)
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class observateurButtonEtText implements ActionListener {
private plateau plat; //le plateau de jeu
private int fonction; //la fonction de l'observateur
private JTextField zone; // la zone de texte a modifier
//constructeur
//@params (le plateau, la fonction, la zone de texte)
public observateurButtonEtText(plateau plat0, int fonction0, JTextField zone0){
//on initialise les attributs
this.plat=plat0;
this.fonction=fonction0;
this.zone=zone0;
}
@Override
public void actionPerformed(ActionEvent evenement){
//si fonction 1 on va adapter la zone de texte en fonction de son contenu
if(this.fonction==1){
int nombre=0;
//try catch pour le parseInt pour voir si le format correspond
//tant que le format est bon:
try{
//on met le fond du texte en blanc
this.zone.setBackground(new Color(255,255,255));
//on recupere le nombre contenu dans le text
nombre=Integer.parseInt(evenement.getActionCommand());
//si il est inferieur a 0
if(nombre<0){
//je le met sur 0 (min de bombe)
nombre=0;
}
//si les collonnes et les ligne ne sont pas encore selectionner
//vu par les valeur sentinnelles (-1)
if(this.plat.getLigne()!=-1 && this.plat.getCollonne()!=-1){
//si il y a plus de bombe que de case
if(nombre>this.plat.getLigne()*this.plat.getCollonne()){
//on repositionne le nombre de bombe au maximun
nombre=this.plat.getLigne()*this.plat.getCollonne();
}
//on affiche le nombre dans la zone de text
this.zone.setText(String.valueOf(nombre));
}else{
//si les ligne et les collonnes ne sont pas encore selectionner
//fond e rouge
this.zone.setBackground(Color.red);
//on précise a l'utilisateur se que l'ont veut
this.zone.setText("Selectionner Ligne et Collonne Avant");
//on précisera au plateau que le choix des bombes n'est plus bon
//par une valeur sentinnelles
//pour eviter de garder l'ancien nombre si il y en avait un
nombre=-1;
}
//on dis au plateau le nombre de bombe
this.plat.setBombe(nombre);
}catch(NumberFormatException e1){
//si le format n'est pas bon
//fond en rouge
this.zone.setBackground(Color.red);
//on précise a l'utilisateur l'erreur
this.zone.setText("rentrer un entier");
//on précisera au plateau que le choix des bombes n'est plus bon
//par une valeur sentinnelles
//pour eviter de garder l'ancien nombre si il y en avait un
this.plat.setBombe(-1);
}
}
//si la fonction est 2
if(this.fonction==2){
int nombre=0;
//try catch pour les format pas bon
//tant que il n'y a pas d'Exception
try{
//fond en blanc
this.zone.setBackground(new Color(255,255,255));
//le nombre est = au nombre dans la zone de texte
nombre=Integer.parseInt(this.zone.getText());
//si inferieur a 0
if(nombre<0){
//nombre a 0 (min de bombe)
nombre=0;
}
//si collonne et ligne deja existant
if(this.plat.getLigne()!=-1 && this.plat.getCollonne()!=-1){
//si ce nombre > nb de Case
if(nombre>this.plat.getLigne()*this.plat.getCollonne()){
//nombre = nombre max de bombe
nombre=this.plat.getLigne()*this.plat.getCollonne();
}
//on précise au plateau le nombre de bombe
this.plat.setBombe(nombre);
//si il tout est deja initialiser (ligne, collonne et bombe)
if(this.plat.getLigne()!=-1 && this.plat.getCollonne()!=-1 && this.plat.getBombe()!=-1){
//on lance la nouvelle partie
this.plat.newGame();
}else{
//autrement
if(this.plat.getBombe()==-1){
this.zone.setBackground(Color.red);
this.zone.setText("Rentrer un nombre de Bombe");
}
}
}else{
this.zone.setBackground(Color.red);
this.zone.setText("Selectionner Ligne et Collonne Avant");
this.plat.setBombe(-1);
}
this.plat.setBombe(nombre);
}catch(NumberFormatException e1){
this.zone.setBackground(Color.red);
this.zone.setText("rentrer un entier");
this.plat.setBombe(-1);
}
}
if(this.fonction==3){
//si fonction 3 donc boutons +
//plusoumoins avec comme argument +1
this.plusoumoins(1);
}
if(this.fonction==4){
//si fonction 4 donc boutons -
//plus ou moins avec argument -1
this.plusoumoins(-1);
}
}
private void plusoumoins(int n){
int nombre=0;
//try catch pour les gestion de format non conforme
//tant que il n'y a pas d'exception
try{
//fond en blanc
this.zone.setBackground(new Color(255,255,255));
//le nombre = nombre deja présent + l'argument
nombre=Integer.parseInt(this.zone.getText())+n;
//si le nombre <0 nombre = au minimum
if(nombre<0){
nombre=0;
}
//si les collonnes et les lignes existe deja
if(this.plat.getLigne()!=-1 && this.plat.getCollonne()!=-1){
//si le nomnbre > au nombre de case
// nombre = nombre de case
if(nombre>this.plat.getLigne()*this.plat.getCollonne()){
nombre=this.plat.getLigne()*this.plat.getCollonne();
}
//on indique a l'utilisateur le nouveau nombre
this.zone.setText(String.valueOf(nombre));
}else{
//si pas de ligne et de collonnes
//fond en rouge
this.zone.setBackground(Color.red);
//on indique a l'utilisateur les précondition avant de remplir ce champs
this.zone.setText("Selectionner Ligne et Collonne Avant");
//on indique au plateau que le choix n'est toujours pas fait
nombre=-1;
}
//on précise au plateau le nombre de bombe choisit
this.plat.setBombe(nombre);
}catch(NumberFormatException e1){
//si format inchohérent
//fond en rouge
this.zone.setBackground(Color.red);
//on précise ce que l'ont veut
this.zone.setText("rentrer un entier");
//on indique au plateau que le choix n'est toujours pas fait
this.plat.setBombe(-1);
}
}
}