IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

TP calculatrice-execution difficile


Sujet :

avec Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    970
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 970
    Points : 141
    Points
    141
    Par défaut TP calculatrice-execution difficile
    Bonjour,

    Je suis en train de travailler sur le projet de la calculatrice( au passage, si cela intéresse quelqu'un il peut s'inspirer de mon code)

    Je parviens à compiler le code mais pas à l'exécuter ; pouvez-vous m'aider à comprendre pourquoi.

    Je vous informe au cas où cela peut servir que j'ai crée une classe Calculatrice qui contient des classes internes

    Je vous en remercie beaucoup.

    Voici les commandes de compilation et execution

    C:\Java\Test\Test_06_04_2012\src\package_calculatrice>javac Main.java
    Main.java:5: cannot find symbol
    symbol : class Calculatrice
    location: class package_calculatrice.Main
    Calculatrice calculette = new Calculatrice();
    ^
    Main.java:5: cannot find symbol
    symbol : class Calculatrice
    location: class package_calculatrice.Main
    Calculatrice calculette = new Calculatrice();
    ^
    2 errors

    Voici à présent le fameux code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
     
     
    package package_calculatrice;
     
     
    //Un LayoutManager est une interface(ensemble de méthodes)  
    //Cette interface est implémentée par toutes les classes dont le rôle est  de régir la disposition spatiale de toutes les instances des classes filles de la classe Container( qui dit classe fille 
    //dit aussi petite-fille etc...): 
    //La classe Jcomponent est une classe fille de la classe Container- voir page2-6 du document Toolkit Graphique AWT/Swing -ENST -E.Lecolinet 
     
    //une classe qui implémente l'interface  LayoutManager peut donc régir la disposition spatiale d'une instance de la classe Jcomponent et peut donc aussi régir la disposition spatiale de toutes les instances 
    //des sous-classes de Jcomponent
    //Il existe plusieurs classes implémentant cette interface  :La classe BorderLayout en est une
    //Une instance de la classe BorderLayout  régit la disposition spatiale d'un Jcomponent( ou d'une instance de ses sous classes)
    //avec une disposition de type points cardinaux: voir page 2-43 du document Toolkit Graphique AWT/Swing -ENST -E.Lecolinet 
    import java.awt.BorderLayout;
     
    //java.awt.Color est un package ou paquetage(ensemble de classes).
    //Dans les classes Color et Font du paquetage java.awt.*, se trouvent les constantes, attributs et méthodes permettant d'utiliser diverses ressources gérées par le système : 
    //couleurs et polices de caractères . 
    import java.awt.Color;
    //la classe Dimension du package awt permet de dimensionner un composant graphique d'après la largeur et la hauteur précisée en paramètres du constructeur de cette classe( voir API java, 
    //les constructeurs de classe Dimension 
    import java.awt.Dimension;
    //voir définition donnée plus haut à propos dela classe Color
    import java.awt.Font;
     
     
    import java.awt.*;
    //Si un evènement de type click sur un bouton ,se produit, une instance de la classe ActionEvent est créée.C'est donc un exemplaire d'une sous -classe de la classe Event, qui est un evènement.
    //Le mot Action signifie qu'il s'agit d'un évènement lié à un bouton ou à un champ de texte( voir p2-20 du document Toolkit Graphique AWT/Swing -ENST -E.Lecolinet )
     
    //Si un évènement de type click sur une souris se produit, une instance de la classe  MouseEvent est créée, qui représente un évènement lié à la souris
     
    //Si un evènement de type appui sur une touche , se produit, une instance de la classe Keyevent est créée, qui représente un evènement lié à une touche de clavier
     
    //=>En fonction du type d'évènement qui se produit( click sur souris, appui sur un touche de clavier etc...), une instance d'un évènement d'un type différent sera créée
     
    //Dans notre cas, nous allons gérer les evènements de type click sur un bouton
    //C'est donc, à chaque click sur un bouton,  une instance de la classe ActionEvent, qui sera créée 
    //Nous avons donc besoin d'importer cette classe
    import java.awt.event.ActionEvent;
     
    //A chaque click sur un bouton, nous avons besoin qu'un certain code soit executé
    //Ce code est celui que l'on placera dans l'unique méthode de l'interface ActionListener,la méthode ActionPerformed
    import java.awt.event.ActionListener;
     
     
    //import javax.swing.BorderFactory;
     
    //import de la classe JButton du package swing, pour créer des composants de type JButton
    import javax.swing.JButton;
    //import de la classe JFrame du package swing, pour créer des composants de type JFrame
    import javax.swing.JFrame;
    //import de la classe JLabel du package swing, pour créer des composants de type JLabel
    import javax.swing.JLabel;
    //import de la classe JPanel du package swing, pour créer des composants de type JPabel
    import javax.swing.JPanel;
     
     
    public class Calculatrice extends JFrame {
     
        // déclaration de la variable privée tab_string de type tableau de String, destinée à contenir les différents chiffres et opérateurs  
        //apparaissant sur le clavier de la  calculatrice
         private String[] tab_string  = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ".", "=", "C", "+", "-", "*", "/"};
     
    	//déclaration de la variable privée tab_button  de type tableau de JButton, destinée à contenir autant de boutons( de composants de type JButton) qu'il y a de chiffres et d'opérateurs 
    	// sur le clavier de la calculatrice
    	private JButton[] tab_button ; 
     
    	// déclaration de la variable privée container,  de type JPanel.
    	//Ce panneau est  destiné à recevoir les 3 panneaux suivants( un panneau =une instance de la classe  JPanel) : 
    	//-panEcran qui contient le label qui affiche les chiffres saisis et les resultats d'opérations
    	//-panChiffre qui contient les chiffres du clavier de la calculatrice
    	//-panOperateur qui contient les opérateurs servant aux différentes opérations
          private JPanel container;    
     
    	//déclaration dela variable privée ecran , de type JLabel( c'est un label), qui fait apparaître les chiffres saisis par l'utilisateur ainsi que les résultats d'opérations
    	//( un label est une instance de la classe JLabel)
          JLabel ecran ;
     
     
    	//déclaration de la variable privée dim1, qui contiendra la dimension ( c'est à dire les deux composantes (largeur et hauteur) d'un bouton)des boutons suivants: 
    	//-ceux qui présentent des chiffres
    	//-le bouton qui présente le signe "="
    	//-le bouton qui présente le "." (équivaut à une virgule)
     
          private Dimension dim1; 
     
    	//déclaration de la variable privée dim2 qui contiendra la dimension des boutons qui présentent les opérateurs  suivants ( C, +, -, /,*), c'est à dire les deux composantes (largeur et hauteur) d'un bouton
         // le bouton qui présente l'opérateur "=" aura pour dimension dim1, comme précisé ci-dessus 
    	private Dimension dim2;
     
    	//déclaration de la variable privée dim3  qui contiendra la dimension du Jlabel ecran
    	private Dimension dim3;
     
     
    	//déclaration de la variable chiffre qui a le statut friend, c'est à dire qu'elle n'est accessible que dans 
    	//le package  package_calculatrice, en particulier  dans les classes ChiffreListener, DivListener etc...
    	//C'est  une variable intermediaire destinée à recevoir le résultat d'une opération
    	//Ce resultat sera ensuite affiché dans le JLabel ecran
        double chiffre;
     
    	//declaration de deux variables de type booleen:
    	//-clickOperateur qui contient true si l'utilsateur a cliqué sur un bouton qui designe un opérateur ou false dans le cas contraire
    	//- update qui contient 
      //ces deux variables ont le modificateur  friendly, qui signifie qu'elles ne sont accessibles que dans le package 
      //package_calculatrice, en particulier  dans les classes ChiffreListener, DivListener etc...
           //-la variable update contient true si nous devons effacer ce qu'il y a à l'écran pour écrire un nouveau nombre.
           //elle contient false si nous ne devons pas le faire 
           //-la variable clicOperateur contient true si un opérateur a été choisi( c'est à dire si on a cliqué sur le bouton d'un opérateur tel que "+", "-", "*", "/")et false si on a cliqué sur un chiffre pou sur l'opérateur "="
        boolean clicOperateur, update ;
     
    	// declaration de la variable operateur qui contient la valeur de l'opérateur courant
          String operateur; 
    	//declaration de la variable panOperateur , de type JPanel,  qui contiendra, une fois initialisée,  les opérateurs servant aux différentes opérations
    	private JPanel panOperateur ; 
     
    	//déclaration de la variable privée dim4  qui contiendra la dimension du JPanel panOperateur
    	private Dimension dim4;
     
    	//declaration de la variable panChiffre, de type JPanel,  qui contiendra,  une fois initialisée, les chiffres du clavier de la calculatrice
    	private JPanel panChiffre; 
    	//déclaration de la variable privée dim5  qui contiendra la dimension du JPanel panChiffre
    	private Dimension dim5; 
     
    	//déclaration de la variable panEcran, de type JPanel,  qui contiendra, une fois initialisée, le label qui affiche les chiffres saisis et les resultats d'opérations
    	private JPanel panEcran; 
    	//déclaration de la variable privée dim6  qui contiendra la dimension du JPanel Panecran
    	private Dimension dim6;
     
     
          public Calculatrice(){
     
          this.setSize(240, 260);
          this.setTitle("Calculette");
    		// reprendre la signification de cette méthode
          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		//reprendre la signification de cetre méthode
           this.setLocationRelativeTo(null);
    		//appel de la m&thode setResizable de la classe JFrame, qui , du fait de la valeur de 
    		//son argument =false, ne permet pas de modifier dynamiquement la taille de la fenêtre
           this.setResizable(false);
    		// initialisation du tableau tab_string avec toutes les valeurs du clavier de la calculatrice
    		//this.tab_string = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ".", "=", "C", "+", "-", "*", "/"};
     
    		//initialisation du tableau tab_button, dont le nombre d'éléments est égal à la longueur du tableau tab_string
    		this.tab_button = new JButton[tab_string.length];
    		// initialisation des deux variables dim1 et dim2 avec , en paramètres rééls du constructeur de la classe Dimension, les valeurs de la largeur et de la hauteur 
    		this.dim1 = new Dimension(50, 40);
    		this.dim2 = new Dimension(50, 31);
    		this.dim3=new Dimension(220,20);
    		this.dim4=new Dimension (55,225);
    		this.dim5=new Dimension (165,225);
    		this.dim6=new Dimension (220,30);
     
    		//initialisation de la variable chiffre à 0
    		this.chiffre=0.0; 
    		// initialisation de la variable clicOperateur à false, car pour l'instant aucun click sur le bouton d'un quelconque opérateur n'a eu lieu
    		this.clicOperateur = false;
     
    		// initilialisation de la variable update à false car pour l'instant il n'est pas question d'effacer ce qu'il y a à l'écran
    		//pour écrire un nouveau nombre
    		this.update = false;
     
    		//initialisation de la variable opérateur à la chaîne de caractère vise car aucun opérateur n'a encore été sélectionné
    		this.operateur = "";
    		// appeldela méthode initComposant qui initilialise les différents élements de l'interface graphique:le label qui contient le résultat final, les  3 panels, 
    		// les bouton de la calculatrice avec leur libellé, le positionnement des différents panel selon un layoutmanager de type BORDERLAYOUT
                  initComposants();
     
                  this.setContentPane(container);
     
                  this.setVisible(true);
          }//fin de constructeur Calculatrice
     
          private void initComposants(){
          		// declaration et création de la  police de caractère du label qui contient les différents opérateurs et opérandes des opérations 
          	//et le résultat final de l'opération
                  Font police_ecran = new Font("Arial", Font.BOLD, 20);
                  //initialisation du label nommé ecran, qui  contient les différents opérateurs et opérandes des 
                  //opérations et le résultat final de l'opération, avec le caractère "0"(chiffre 0)
                  this.ecran = new JLabel("0");
                  //appel de la méthode setFont avec en paramètre le label police_ecran; 
                  //cette police sera appliquée au label nommé ecran; 
                  //Cette méthode est une méthode héritée de la classe JComponent du package swingx , qui est la classe mère de JLabel(super classe)
                  //
                  this.ecran.setFont(police_ecran);
                  //appel de la méthode setHorizontalAlignment avec en paramètre la position "RIGHT"  , de type int, 
                  //L'appel de cette méthode est appliquée au JlabelS nommé ecran et permet 
                  //l'alignement du contenu du label sur l'axe des X( des abscisses) mais avec une saisie de droite à gauche.
                  this.ecran.setHorizontalAlignment(JLabel.RIGHT);
                  //
                  this.ecran.setPreferredSize(dim3);
     
                  this.panOperateur = new JPanel();        
                  this.panOperateur.setPreferredSize(dim4);
     
                  this.panChiffre = new JPanel();
                  this.panChiffre.setPreferredSize(dim5);
     
                  this.panEcran = new JPanel();
                  this.panEcran.setPreferredSize(dim6);
     
                  // pour chaque case   d'indice 0 à l'indice 16, du tableau tab_button, on crée un nouvel élément(une nouvelle instance), c'est à dire un nouveau bouton
                  //qui aura le texte précisé à l'indice i du tableau tab_string; par exemple pour le premier bouton d'inde 0 du tableau tab_button, il aura le texte d'indice 0 du tableau tab_string, 
                  //c'est à dire "1" etc...
                  //Tous les boutons du tableau tab_button autont la dimension dim1, c'est à dire 50 pixels de longueur et 40 pixels de hauteur
                  for(int i = 0; i < tab_string.length; i++)   {
     
                       this.tab_button[i] = new JButton(tab_string[i]);
                       this.tab_button[i].setPreferredSize(dim1);
                      // pour tous les boutons d'indice 11 à 16, c'est à dire les boutons qui ont le textre suivants
                       //"=", "C", "+", "-", "*", "/", on leur adjoint un comportement particulier
                      switch(i){
    	                //Dans le cas où i =11, c'est à dire pour le bouton qui représente l'opérateur  "=", on lui adjoint, par le biais de la méthode addActionListener, 
                      //le comportement d'une instance de la classe EgalListener, qui implémente l'interface ActionListener.
     
                      // Cela signifie que chaque fois qu'un click sur bouton se produira, le code de toutes  les méthodes de la nouvelle instance de la classe EgalListener 
                      //sera exécuté.
                      //Il se trouve qu'il n'existe qu'une seule méthode dans l'interface ActionListener; cette méthode s'appelle ActionPerformed.
                      //Donc , seul ce code sera executé, lors d'un click sur un bouton.
                      //le détail du code de cette méthode sera expliqué dans la classe EgalListener
                      case 11 :
                      		 this.tab_button[i].addActionListener(new EgalListener());
                      		 //on ajoute ensuite le bouton qui est l'élement d'indice 11 du tableau tab_button au panel panChiffre, qui est le panel 
                      		 // qui contient les chiffres du clavier de la calculatrice
                      		 this.panChiffre.add(tab_button[i]);
                      		break;
     
                      	case 12 :
                      		 this.tab_button[i].setForeground(Color.red);
    	                         this.tab_button[i].addActionListener(new ResetListener());
    	                         this.tab_button[i].setPreferredSize(dim2);
    	                         this.panOperateur.add(tab_button[i]);
                      		break;
     
                      	case 13 :
                      		 this.tab_button[i].addActionListener(new PlusListener());
                      		 this.tab_button[i].setPreferredSize(dim2);
                      		 this.panOperateur.add(tab_button[i]);
                      		break;
     
                      	case 14 :
                      		 this.tab_button[i].addActionListener(new MoinsListener());
                      		 this.tab_button[i].setPreferredSize(dim2);
                      		 this.panOperateur.add(tab_button[i]);
                      		break;	
     
                      	case 15 :	
                      		 this.tab_button[i].addActionListener(new MultiListener());
                      		 this.tab_button[i].setPreferredSize(dim2);
                      		 this.panOperateur.add(tab_button[i]);
                      		break;
     
                      	case 16 :
                      		 this.tab_button[i].addActionListener(new DivListener());
                      		 this.tab_button[i].setPreferredSize(dim2);
                      		 this.panOperateur.add(tab_button[i]);
                      		break;
                      	  // dans le cas où l'on n'a pas cliqué sur un bouton qui représente un opérateur                  	
                      	default :
                      		 this.tab_button[i].addActionListener(new ChiffreListener());
                      		 this.panChiffre.add(tab_button[i]);
     
                      		break;
                      }// fin de switch
     
                  }// fin de for
     
                   this.panEcran.add(ecran);
                  // this.panEcran.setBorder(BorderFactory.createLineBorder(Color.black));
     
                   this.container.add(panEcran, BorderLayout.NORTH);
                   this.container.add(panChiffre, BorderLayout.CENTER);
                   this.container.add(panOperateur, BorderLayout.EAST);
     
          }// fin de initComposant
     
     
          public void calcul(){
                  if( this.operateur.equals("+") )
                  {
                  	//la classe Double "enveloppe" une valeur du type primitf double en une instance du type Double 
                  	//la classe Double propose plusieurs méthodes de conversion d'un String en Double ou d'un Double en String, ce qui n'est pas le cas pour le type double primitif.
                  	//La méthode parseDouble de la classe Double permet justement la conversion d'un String en Double
     
                  	//la variable chiffre va contenir la valeur saisie dans le label convertie en Double
     
                           this.chiffre = chiffre + Double.parseDouble(ecran.getText()); 
     
    			 //la méthode String valueOf(double d) de la classe String est une méthode statique
    			//C'est pour cette raison que lorsqu'on l'appelle on met devant le nom de la classe et non pas le nom d'une instance de la classe String
                  	//Elle permet de retourner une instance de type String qui est la conversion d' une valeur de type double
                  	//qui est celle du paramètre de type double convertie en type String 
     
                           //this.ecran.setText(String.valueOf(chiffre));
                  }
     
     
                  if( this.operateur.equals("-"))
                  {
    			this.chiffre = chiffre - Double.parseDouble(ecran.getText()); 
                           //this.chiffre = chiffre - Double.valueOf(ecran.getText()).doubleValue();
                          // this.ecran.setText(String.valueOf(chiffre));
                  }               
     
                  if( this.operateur.equals("*"))
                  {
                           //this.chiffre = chiffre * Double.valueOf(ecran.getText()).doubleValue();
    			 this.chiffre = chiffre * Double.parseDouble(ecran.getText());
                          // this.ecran.setText(String.valueOf(chiffre));
                  }       
     
                  if( this.operateur.equals("/"))
                  {
                          try{
                                   //this.chiffre = chiffre / Double.valueOf(ecran.getText()).doubleValue();
    				  this.chiffre = chiffre / Double.parseDouble(ecran.getText());
    				  this.ecran.setText(String.valueOf(chiffre));
     
                          }// fin de try 
    			catch(ArithmeticException e){
                          	//dans le cas où il est demandé une  division par 0, le chiffre 0 ( de type caractère)
                          	//s'affiche dans le JLabel ecran
                                   this.ecran.setText("0");
                          }// fin de catch
     
          }// fin de if ( this.operateur.equals("/"))
     
    }// fin de méthode calcul
     
    }// fin de classe Calculatrice 
     
          //permet l'affichage dans le JLabel ecran , du chiffre sur lequel on a cliqué 
          class ChiffreListener implements ActionListener{
     
                          @Override
                          public void actionPerformed(ActionEvent e) {
     
     
                          	//lorqu'on a clické sur un bouton qui n'est pas le bouton d'un opérateur, donc lorsqu'on a cliqué sur un chiffre, 
                          	//il se crée une instance de la classe ActionEvent
                          	//On récupère l'adresse de cette instance dans la variable e de type ActionEvent.
                          	//Ensuite, on apelle la méthode getSource de la classe ActionEvent.
                          	//Celle-ci permet de retourner le bouton( c'est à dire l'instance de la classe JButton)sur lequel on a cliqué
                          	//l'appel de la méthode getText, appliqué à ce bouton, permet de retourner le texte écrit sur le bouton sur lequel on a cliqué
                          	//Ce texte est affecté à la variable str
     
                                  String str = ((JButton)e.getSource()).getText();
     
          			//update est = true quand on a cliqué sur un opérateur , ce qui permet d'effacer le chiffre saisi auparavant
                                  //if(update) teste si la variable update contient true et donc teste si on est dans une situation où 
                                  //on a cliqué auparavant sur un opérateur 
                                 // si c'est le cas, on reinitialise simplement la variable update à false, pour permette  la saisie du chiffre en cours 
                                  if(update)
                                  {
                                          update = false;
                                  }
                                  else
          			//dans le cas où update est déjà à false, c'est à dire par exemple lorsqu'on commence la saisie de l'expression numérique,
          			//alors on affiche simplement le contenu de la variable str
                                  {
          			// si le Jlabel ecran ne contient pas le chiffre 0 ,  la variable str qui contient la chaine de 
                                  //caractères à afficher,  va contenir ce qui existe déjà à l'écran dans le Jlabel + 
                                  //le chiffre du bouton sur lequel on a cliqué(exemple affichage du nombre 87)
                                          if(!ecran.getText().equals("0"))
                                                  str = ecran.getText() + str;
                                  }
     
                                  ecran.setText(str);
                          }
     
                  }// fin de class ChiffreListener
     
          class EgalListener implements ActionListener{
        	  //Au moment où l'utilisateur clique sur le bouton "=", la variable operateur  contient normalement "+" ou "-" ou "*" ou "/"
        	                 @Override
        	                 public void actionPerformed(ActionEvent arg0) {
        	 			// du fait que la variable operateur contient les opérateurs "+" ou "-" ou "*" ou "/" quand on clique sur "=",
        	 			//une opération d'addition ,de multiplication,  de soustraction ou de division 
        	 			//doit s'executer quand on clique sur le bouton "=".
        	 			//C'est ce qui justifie l'appel de la méthodoe calcul
        	 			 calcul();
     
        	 			 //quand on clique sur l' opérateur  = après la saisie d'un chiffre, cela efface le chiffre 
        	                 	 // pour afficher un resultat 
        	                 	 //et update = true;
        	                 	 update = true;
        	 			 //on considère que l'opérateur = n'est pas un opérateur qui permet de faire des calculs; 
        	 			 //il permet  simplement d'afficher  un resultat
        	                         //quand on clique dessus , la variable clicOperateur vaut donc false
     
        	                         clicOperateur = false;
        	                 }
     
        	         }
     
          class PlusListener implements ActionListener{
     
        	    @Override
        	    public void actionPerformed(ActionEvent arg0) {
     
        	 try{
     
        	           //la variable clicOperateur vaut true lorsqu'on a déjà cliqué précédemment sur un opérateur "-" ou "*"ou  "+"ou  "/" 
        	            //c'est à dire lorsqu'on a déjà fait une première opération 
        	            if(clicOperateur)
        	            {
        		//si la variable operateur contient déjà un opérateur,:"-" ou "*"ou  "+"ou  "/" , on doit alors appeler la méthode calcul
        		//qui va calculer le resultat précédent
        		//ex:si clicOperateur == true, je suis par exemple dans cette situation 3*3+ : j'appelle la méthode calcul, 
        		//qui teste l'opérateur existant(c'est à dire  ici l'operateur *) pour effectuer la multiplcation 3*3
        	                    calcul();
        		 // conversion en String de la valeur contenue dans la variable chiffre, pour pouvoir afficher  cette valeur 
        	        		//dans le label ecran, qui ne peut accepter que des données de type String
     
        	                    ecran.setText(String.valueOf(chiffre));
        	            }
        	            else
     
        	//Si on est dans les cas suivants 
        	//- on clique pour la première fois sur l'opérateur + , la variable clicOperateur vaut false  du fait qu'elle est initialisée avec cette valeur
     
        	            //On doit donc la faire passer à true avec l'instruction qui suit:clicOperateur = true;
     
        	//-on a cliqué précédemment sur le signe" = ", ce qui a provoqué que la variable clicOperateur = false, on doit alors la faire passer à true
     
        	//la variable chiffre vaut simplement ce qui est saisi dans le JLabel ecran( pas encore de resultat calculé)
        	            {
        	                   //chiffre = Double.valueOf(ecran.getText()).doubleValue();
        	       chiffre = Double.parseDouble(ecran.getText());
     
        	                   clicOperateur = true;
        	            }
        	// je ne fais passer la variable operateur à la valeur + qu'après avoir effectué le calcul qui tient compte du fait de l'opérateur existant
        	// c'est à dire dans l'exemple  présent, l'opérateur * 
        	            operateur = "+";
        	 //après la saisie de l'opérateur +  on efface le chiffre à l'écran et donc update passe à  true
        	            update = true;
     
     
        	}// fin de try 
        	catch(NumberFormatException NFex){
        	System.out.println("Attention!! vous n'avez pas saisi de chiffre");
        	ecran.setText("0");
        	}// fin de catch
     
        	 catch(Exception ex){
        	    	System.out.println("Une erreur inattendue s'est produite");	
        	    	ecran.setText("0");
        	    }// fin de deuxièmpe catch
        	 }// fin de actionPerformed
     
        	}// fin de classe 
     
     
     
          class DivListener implements ActionListener{
     
              @Override
              public void actionPerformed(ActionEvent arg0) {
    		try{
    		//la variable clicOperateur vaut true lorsqu'on a déjà cliqué précédemment sur un opérateur "-" ou "*"ou  "+"ou  "/" 
                      //c'est à dire lorsqu'on a déjà fait une première opération 
     
     
                      if(clicOperateur)
    		//si la variable operateur contient déjà un opérateur,:"-" ou "*"ou  "+"ou  "/" , on doit alors appeler la méthode calcul
    		//qui va calculer le resultat précédent
    		//ex:si clicOperateur == true, je suis par exemple dans cette situation 12* 4 / : j'appelle la méthode calcul, 
    		//qui teste l'opérateur existant(c'est à dire  ici l'operateur *) pour effectuer la multiplcation 12 * 4 
                      {
                              calcul();
                              ecran.setText(String.valueOf(chiffre));
                      }
                      else
     
    		//Si on est dans les cas suivants 
    		//- on clique pour la première fois sur l'opérateur / , la variable clicOperateur vaut false  du fait qu'elle est initialisée avec cette valeur
                      //On doit donc la faire passer à true avec l'instruction qui suit:clicOperateur = true;
     
    		//-on a cliqué précédemment sur le signe" = ", ce qui a provoqué que la variable clicOperateur = false, on doit alors la faire passer à true
     
    		//la variable chiffre vaut simplement ce qui est saisi dans le JLabel ecran( pas encore de resultat calculé)
                      {
                              chiffre = Double.valueOf(ecran.getText()).doubleValue();
                              clicOperateur = true;
     
                      }
    		// je ne fais passer la variable operateur à la valeur / qu'après avoir effectué le calcul qui tient compte du fait de l'opérateur existant
    		// c'est à dire dans l'exemple  présent, l'opérateur * 
                      operateur = "/";
    		 //après la saisie de l'opérateur /  on efface le chiffre à l'écran et donc update passe à  true
                      update = true;
     
     
     
    	}// fin de try 
    	catch(NumberFormatException Nfex){
              	System.out.println("Attention!! vous n'avez pas saisi de chiffre");
    				ecran.setText("0");
     
              }// fin de catch 
              catch(Exception ex){
              	System.out.println("Une erreur inattendue s'est produite");	
              	ecran.setText("0");
              }// fin de deuxièmpe catch
     
      }// fin de actionPerformed
     
    }// fin de classe DivListener
     
          class MoinsListener implements ActionListener{
     
              @Override
              public void actionPerformed(ActionEvent arg0) {
     
    		try{
     
                      if(clicOperateur)
                      {
     
    			//si la variable operateur contient déjà un opérateur,:"-" ou "*"ou  "+"ou  "/" , on doit alors appeler la méthode calcul
    			//qui va calculer le resultat précédent
    			//ex:si clicOperateur == true, je suis par exemple dans cette situation 3*3- : j'appelle la méthode calcul, 
    			//qui teste l'opérateur existant(c'est à dire  ici l'operateur *) pour effectuer la multiplcation 3*3
    		        calcul();
                              ecran.setText(String.valueOf(chiffre));
                      }// fin de if 
                      else
    		//Si on est dans les cas suivants 
    		//- on clique pour la première fois sur l'opérateur -, la variable clicOperateur vaut false  du fait qu'elle est initialisée avec cette valeur
    		//On doit donc la faire passer à true avec l'instruction qui suit:clicOperateur = true;
     
    		//-on a cliqué précédemment sur le signe" = ", ce qui a provoqué que la variable clicOperateur = false, on doit alors la faire passer à true
     
    		//la variable chiffre vaut simplement ce qui est saisi dans le JLabel ecran( pas encore de resultat calculé)
     
                      {
                             // chiffre = Double.valueOf(ecran.getText()).doubleValue();
    			chiffre = Double.parseDouble(ecran.getText());
                              clicOperateur = true;
                      }// fin de else 
     
    	      // je ne fais passer la variable operateur à la valeur - qu'après avoir effectué le calcul qui tient compte du fait de l'opérateur existant
    		// c'est à dire dans l'exemple  présent, l'opérateur * 
    	      operateur = "-";
    		 //après la saisie de l'opérateur "-"  on efface le chiffre à l'écran et donc update passe à  true
                      update = true;
    		 //la variable clicOperateur vaut true lorsqu'on a déjà cliqué précédemment sur un opérateur "-" ou "*"ou  "+"ou  "/" 
                      //c'est à dire lorsqu'on a déjà fait une première opération 
     
    	}// fin de try
     
    	catch(NumberFormatException Nfex){
              	System.out.println("Attention!! vous n'avez pas saisi de chiffre");
    				ecran.setText("0");
     
              }// fin de catch 
              catch(Exception ex){
              	System.out.println("Une erreur inattendue s'est produite");	
              	ecran.setText("0");
              }// fin de deuxièmpe catch
     
      }// fin de action Performed
     
    }// fin de classe MoinsListener
     
          class MultiListener implements ActionListener{
     
              @Override
              public void actionPerformed(ActionEvent arg0) {
    		try{
    	//la variable clicOperateur vaut true lorsqu'on a déjà cliqué précédemment sur un opérateur  quel qu'il soit : "*" ,"/", "+", "-" 
              //c'est à dire lorsqu'on a déjà fait une première opération 
                      if(clicOperateur)
                      {
    		//si la variable operateur contient déjà un opérateur,:"-" ou "*"ou  "+"ou  "/" , on doit alors appeler la méthode calcul
    		//qui va calculer le resultat précédent
    		//ex:si clicOperateur == true, je suis par exemple dans cette situation 3+3* : j'appelle la méthode calcul, 
    		//qui teste l'opérateur existant(c'est à dire  ici l'operateur +) pour effectuer la multiplcation 3+3
                              calcul();
                              ecran.setText(String.valueOf(chiffre));
                      }
    		//Si on est dans les cas suivants 
    		//- on clique pour la première fois sur l'opérateur * , la variable clicOperateur vaut false  du fait qu'elle est initialisée avec cette valeur
                      //On doit donc la faire passer à true avec l'instruction qui suit:clicOperateur = true;
     
    		//-on a cliqué précédemment sur le signe" = ", ce qui a provoqué que la varaible clicOperateur = false, on doit alors la faire passer à true
     
    		//la variable chiffre vaut simplement ce qui est saisi dans le JLabel ecran( pas encore de resultat calculé)
                      else
                      {
                             // chiffre = Double.valueOf(ecran.getText()).doubleValue();
    			chiffre = Double.parseDouble(ecran.getText());
                              clicOperateur = true;
                      }
    		// je ne fais passer la variable operateur à la valeur * qu'après avoir effectué le calcul qui tient compte du fait de l'opérateur existant
    		// c'est à dire dans l'exemple  présent, l'opérateur + 
                      operateur = "*";
    		 //après la saisie de l'opérateur *  on efface le chiffre à l'écran et donc update passe à  true
                      update = true;
     
     
    		}// fin de try 
     
    		catch(NumberFormatException Nfex){
              	System.out.println("Attention!! vous n'avez pas saisi de chiffre");
    				ecran.setText("0");
     
              }// fin de catch 
              catch(Exception ex){
              	System.out.println("Une erreur inattendue s'est produite");	
              	ecran.setText("0");
              }// fin de deuxièmpe catch
     
          }// fin de actionPerformed
     
      }// fin de classe MultiListener
     
          class ResetListener implements ActionListener{
     
              @Override
              public void actionPerformed(ActionEvent arg0) {
    		try{
    		//quand on appuie sur le bouton Reset, la variable clicOperateur repasse
    		//puisqu'on n'a pas cliqué sur un opérateur tel que "+", "-", "*", "/" 
                      clicOperateur = false;
    		//update passe à true, puisqu'on va effacer tou ce qui est dans le JLabel ecran
                      update = true;
    		//la varaible chiffre est réinitialisée à true
                      chiffre = 0;
    		//la variable operateur eszt égaelement réinitialisée avec sa valeur par défaut =""
                      operateur = "";
    		//e JLabel ecran contient la chaîne de caractères vide
                      ecran.setText("");
              }// fin de try 
     
    	catch(Exception ex){
    		System.out.println("Une erreur inattendue s'est produite");
    		 ecran.setText("0");
     
    	}// fin de catch
     
      }// fin de actionPerformed
     
    }// fin de classe ResetListener
     
     
     
    Code : Java
     
    1
    2
    3
    4
    5
    6
    7
    8
     
     
     
    package package_calculatrice;
     
    public class Main {
    	public static void main(String[] args) {
        Calculatrice calculette = new Calculatrice();
     
        }// fin de méthode 
    }// fin de classe
     
     
     
    2 errors

  2. #2
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    Il faut importer la classe Calculatrice...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    970
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 970
    Points : 141
    Points
    141
    Par défaut tp calculatrice import d'une classe
    Bonjour et merci de ta réponse.

    Peux tu m'expliquer pourquoi le fait d'écrire l'instruction package package_calcultrice; ne suffit pas à importer la classe calculatrice.

    Merci à toi.

    Cordialement.

    new_wave

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    970
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 970
    Points : 141
    Points
    141
    Par défaut import de lac alsse calculatrice-tp calculatrice
    Bonjour,

    Il semble que la compilateur a un problème pour aller trouver la classe Calculatrice, même après l'instruction d'import.
    En fait, à l'instruction d'import, j'obtiens une erreur.
    Je transmets tout le code de ce TP avec un fichier qui contient les message d'erreurs(fichier joint dans gerer les pièces jointes )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
     
    //Un LayoutManager est une interface(ensemble de méthodes)  
    //Cette interface est implémentée par toutes les classes dont le rôle est  de régir la disposition spatiale de toutes les instances des classes filles de la classe Container( qui dit classe fille 
    //dit aussi petite-fille etc...): 
    //La classe Jcomponent est une classe fille de la classe Container- voir page2-6 du document Toolkit Graphique AWT/Swing -ENST -E.Lecolinet 
     
    //une classe qui implémente l'interface  LayoutManager peut donc régir la disposition spatiale d'une instance de la classe Jcomponent et peut donc aussi régir la disposition spatiale de toutes les instances 
    //des sous-classes de Jcomponent
    //Il existe plusieurs classes implémentant cette interface  :La classe BorderLayout en est une
    //Une instance de la classe BorderLayout  régit la disposition spatiale d'un Jcomponent( ou d'une instance de ses sous classes)
    //avec une disposition de type points cardinaux: voir page 2-43 du document Toolkit Graphique AWT/Swing -ENST -E.Lecolinet 
    import java.awt.BorderLayout;
     
    //java.awt.Color est un package ou paquetage(ensemble de classes).
    //Dans les classes Color et Font du paquetage java.awt.*, se trouvent les constantes, attributs et méthodes permettant d'utiliser diverses ressources gérées par le système : 
    //couleurs et polices de caractères . 
    import java.awt.Color;
    //la classe Dimension du package awt permet de dimensionner un composant graphique d'après la largeur et la hauteur précisée en paramètres du constructeur de cette classe( voir API java, 
    //les constructeurs de classe Dimension 
    import java.awt.Dimension;
    //voir définition donnée plus haut à propos dela classe Color
    import java.awt.Font;
     
     
    import java.awt.*;
    //Si un evènement de type click sur un bouton ,se produit, une instance de la classe ActionEvent est créée.C'est donc un exemplaire d'une sous -classe de la classe Event, qui est un evènement.
    //Le mot Action signifie qu'il s'agit d'un évènement lié à un bouton ou à un champ de texte( voir p2-20 du document Toolkit Graphique AWT/Swing -ENST -E.Lecolinet )
     
    //Si un évènement de type click sur une souris se produit, une instance de la classe  MouseEvent est créée, qui représente un évènement lié à la souris
     
    //Si un evènement de type appui sur une touche , se produit, une instance de la classe Keyevent est créée, qui représente un evènement lié à une touche de clavier
     
    //=>En fonction du type d'évènement qui se produit( click sur souris, appui sur un touche de clavier etc...), une instance d'un évènement d'un type différent sera créée
     
    //Dans notre cas, nous allons gérer les evènements de type click sur un bouton
    //C'est donc, à chaque click sur un bouton,  une instance de la classe ActionEvent, qui sera créée 
    //Nous avons donc besoin d'importer cette classe
    import java.awt.event.ActionEvent;
     
    //A chaque click sur un bouton, nous avons besoin qu'un certain code soit executé
    //Ce code est celui que l'on placera dans l'unique méthode de l'interface ActionListener,la méthode ActionPerformed
    import java.awt.event.ActionListener;
     
     
    //import javax.swing.BorderFactory;
     
    //import de la classe JButton du package swing, pour créer des composants de type JButton
    import javax.swing.JButton;
    //import de la classe JFrame du package swing, pour créer des composants de type JFrame
    import javax.swing.JFrame;
    //import de la classe JLabel du package swing, pour créer des composants de type JLabel
    import javax.swing.JLabel;
    //import de la classe JPanel du package swing, pour créer des composants de type JPabel
    import javax.swing.JPanel;
     
     
    public class Calculatrice extends JFrame {
     
      // déclaration de la variable privée tab_string de type tableau de String, destinée à contenir les différents chiffres et opérateurs  
      //apparaissant sur le clavier de la  calculatrice
       private String[] tab_string  = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ".", "=", "C", "+", "-", "*", "/"};
     
    	//déclaration de la variable privée tab_button  de type tableau de JButton, destinée à contenir autant de boutons( de composants de type JButton) qu'il y a de chiffres et d'opérateurs 
    	// sur le clavier de la calculatrice
    	private JButton[] tab_button ; 
     
    	// déclaration de la variable privée container,  de type JPanel.
    	//Ce panneau est  destiné à recevoir les 3 panneaux suivants( un panneau =une instance de la classe  JPanel) : 
    	//-panEcran qui contient le label qui affiche les chiffres saisis et les resultats d'opérations
    	//-panChiffre qui contient les chiffres du clavier de la calculatrice
    	//-panOperateur qui contient les opérateurs servant aux différentes opérations
        private JPanel container;    
     
    	//déclaration dela variable privée ecran , de type JLabel( c'est un label), qui fait apparaître les chiffres saisis par l'utilisateur ainsi que les résultats d'opérations
    	//( un label est une instance de la classe JLabel)
        JLabel ecran ;
     
     
    	//déclaration de la variable privée dim1, qui contiendra la dimension ( c'est à dire les deux composantes (largeur et hauteur) d'un bouton)des boutons suivants: 
    	//-ceux qui présentent des chiffres
    	//-le bouton qui présente le signe "="
    	//-le bouton qui présente le "." (équivaut à une virgule)
     
        private Dimension dim1; 
     
    	//déclaration de la variable privée dim2 qui contiendra la dimension des boutons qui présentent les opérateurs  suivants ( C, +, -, /,*), c'est à dire les deux composantes (largeur et hauteur) d'un bouton
       // le bouton qui présente l'opérateur "=" aura pour dimension dim1, comme précisé ci-dessus 
    	private Dimension dim2;
     
    	//déclaration de la variable privée dim3  qui contiendra la dimension du Jlabel ecran
    	private Dimension dim3;
     
     
    	//déclaration de la variable chiffre qui a le statut friend, c'est à dire qu'elle n'est accessible que dans 
    	//le package  package_calculatrice, en particulier  dans les classes ChiffreListener, DivListener etc...
    	//C'est  une variable intermediaire destinée à recevoir le résultat d'une opération
    	//Ce resultat sera ensuite affiché dans le JLabel ecran
      double chiffre;
     
    	//declaration de deux variables de type booleen:
    	//-clickOperateur qui contient true si l'utilsateur a cliqué sur un bouton qui designe un opérateur ou false dans le cas contraire
    	//- update qui contient 
    //ces deux variables ont le modificateur  friendly, qui signifie qu'elles ne sont accessibles que dans le package 
    //package_calculatrice, en particulier  dans les classes ChiffreListener, DivListener etc...
         //-la variable update contient true si nous devons effacer ce qu'il y a à l'écran pour écrire un nouveau nombre.
         //elle contient false si nous ne devons pas le faire 
         //-la variable clicOperateur contient true si un opérateur a été choisi( c'est à dire si on a cliqué sur le bouton d'un opérateur tel que "+", "-", "*", "/")et false si on a cliqué sur un chiffre pou sur l'opérateur "="
      boolean clicOperateur, update ;
     
    	// declaration de la variable operateur qui contient la valeur de l'opérateur courant
        String operateur; 
    	//declaration de la variable panOperateur , de type JPanel,  qui contiendra, une fois initialisée,  les opérateurs servant aux différentes opérations
    	private JPanel panOperateur ; 
     
    	//déclaration de la variable privée dim4  qui contiendra la dimension du JPanel panOperateur
    	private Dimension dim4;
     
    	//declaration de la variable panChiffre, de type JPanel,  qui contiendra,  une fois initialisée, les chiffres du clavier de la calculatrice
    	private JPanel panChiffre; 
    	//déclaration de la variable privée dim5  qui contiendra la dimension du JPanel panChiffre
    	private Dimension dim5; 
     
    	//déclaration de la variable panEcran, de type JPanel,  qui contiendra, une fois initialisée, le label qui affiche les chiffres saisis et les resultats d'opérations
    	private JPanel panEcran; 
    	//déclaration de la variable privée dim6  qui contiendra la dimension du JPanel Panecran
    	private Dimension dim6;
     
     
        public Calculatrice(){
     
        this.setSize(240, 260);
        this.setTitle("Calculette");
    		// reprendre la signification de cette méthode
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		//reprendre la signification de cetre méthode
         this.setLocationRelativeTo(null);
    		//appel de la m&thode setResizable de la classe JFrame, qui , du fait de la valeur de 
    		//son argument =false, ne permet pas de modifier dynamiquement la taille de la fenêtre
         this.setResizable(false);
    		// initialisation du tableau tab_string avec toutes les valeurs du clavier de la calculatrice
    		//this.tab_string = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ".", "=", "C", "+", "-", "*", "/"};
     
    		//initialisation du tableau tab_button, dont le nombre d'éléments est égal à la longueur du tableau tab_string
    		this.tab_button = new JButton[tab_string.length];
    		// initialisation des deux variables dim1 et dim2 avec , en paramètres rééls du constructeur de la classe Dimension, les valeurs de la largeur et de la hauteur 
    		this.dim1 = new Dimension(50, 40);
    		this.dim2 = new Dimension(50, 31);
    		this.dim3=new Dimension(220,20);
    		this.dim4=new Dimension (55,225);
    		this.dim5=new Dimension (165,225);
    		this.dim6=new Dimension (220,30);
     
    		//initialisation de la variable chiffre à 0
    		this.chiffre=0.0; 
    		// initialisation de la variable clicOperateur à false, car pour l'instant aucun click sur le bouton d'un quelconque opérateur n'a eu lieu
    		this.clicOperateur = false;
     
    		// initilialisation de la variable update à false car pour l'instant il n'est pas question d'effacer ce qu'il y a à l'écran
    		//pour écrire un nouveau nombre
    		this.update = false;
     
    		//initialisation de la variable opérateur à la chaîne de caractère vise car aucun opérateur n'a encore été sélectionné
    		this.operateur = "";
    		// appeldela méthode initComposant qui initilialise les différents élements de l'interface graphique:le label qui contient le résultat final, les  3 panels, 
    		// les bouton de la calculatrice avec leur libellé, le positionnement des différents panel selon un layoutmanager de type BORDERLAYOUT
                initComposants();
     
                this.setContentPane(container);
     
                this.setVisible(true);
        }//fin de constructeur Calculatrice
     
        private void initComposants(){
        		// declaration et création de la  police de caractère du label qui contient les différents opérateurs et opérandes des opérations 
        	//et le résultat final de l'opération
                Font police_ecran = new Font("Arial", Font.BOLD, 20);
                //initialisation du label nommé ecran, qui  contient les différents opérateurs et opérandes des 
                //opérations et le résultat final de l'opération, avec le caractère "0"(chiffre 0)
                this.ecran = new JLabel("0");
                //appel de la méthode setFont avec en paramètre le label police_ecran; 
                //cette police sera appliquée au label nommé ecran; 
                //Cette méthode est une méthode héritée de la classe JComponent du package swingx , qui est la classe mère de JLabel(super classe)
                //
                this.ecran.setFont(police_ecran);
                //appel de la méthode setHorizontalAlignment avec en paramètre la position "RIGHT"  , de type int, 
                //L'appel de cette méthode est appliquée au JlabelS nommé ecran et permet 
                //l'alignement du contenu du label sur l'axe des X( des abscisses) mais avec une saisie de droite à gauche.
                this.ecran.setHorizontalAlignment(JLabel.RIGHT);
                //
                this.ecran.setPreferredSize(dim3);
     
                this.panOperateur = new JPanel();        
                this.panOperateur.setPreferredSize(dim4);
     
                this.panChiffre = new JPanel();
                this.panChiffre.setPreferredSize(dim5);
     
                this.panEcran = new JPanel();
                this.panEcran.setPreferredSize(dim6);
     
                // pour chaque case   d'indice 0 à l'indice 16, du tableau tab_button, on crée un nouvel élément(une nouvelle instance), c'est à dire un nouveau bouton
                //qui aura le texte précisé à l'indice i du tableau tab_string; par exemple pour le premier bouton d'inde 0 du tableau tab_button, il aura le texte d'indice 0 du tableau tab_string, 
                //c'est à dire "1" etc...
                //Tous les boutons du tableau tab_button autont la dimension dim1, c'est à dire 50 pixels de longueur et 40 pixels de hauteur
                for(int i = 0; i < tab_string.length; i++)   {
     
                     this.tab_button[i] = new JButton(tab_string[i]);
                     this.tab_button[i].setPreferredSize(dim1);
                    // pour tous les boutons d'indice 11 à 16, c'est à dire les boutons qui ont le textre suivants
                     //"=", "C", "+", "-", "*", "/", on leur adjoint un comportement particulier
                    switch(i){
    	                //Dans le cas où i =11, c'est à dire pour le bouton qui représente l'opérateur  "=", on lui adjoint, par le biais de la méthode addActionListener, 
                    //le comportement d'une instance de la classe EgalListener, qui implémente l'interface ActionListener.
     
                    // Cela signifie que chaque fois qu'un click sur bouton se produira, le code de toutes  les méthodes de la nouvelle instance de la classe EgalListener 
                    //sera exécuté.
                    //Il se trouve qu'il n'existe qu'une seule méthode dans l'interface ActionListener; cette méthode s'appelle ActionPerformed.
                    //Donc , seul ce code sera executé, lors d'un click sur un bouton.
                    //le détail du code de cette méthode sera expliqué dans la classe EgalListener
                    case 11 :
                    		 this.tab_button[i].addActionListener(new EgalListener());
                    		 //on ajoute ensuite le bouton qui est l'élement d'indice 11 du tableau tab_button au panel panChiffre, qui est le panel 
                    		 // qui contient les chiffres du clavier de la calculatrice
                    		 this.panChiffre.add(tab_button[i]);
                    		break;
     
                    	case 12 :
                    		 this.tab_button[i].setForeground(Color.red);
    	                         this.tab_button[i].addActionListener(new ResetListener());
    	                         this.tab_button[i].setPreferredSize(dim2);
    	                         this.panOperateur.add(tab_button[i]);
                    		break;
     
                    	case 13 :
                    		 this.tab_button[i].addActionListener(new PlusListener());
                    		 this.tab_button[i].setPreferredSize(dim2);
                    		 this.panOperateur.add(tab_button[i]);
                    		break;
     
                    	case 14 :
                    		 this.tab_button[i].addActionListener(new MoinsListener());
                    		 this.tab_button[i].setPreferredSize(dim2);
                    		 this.panOperateur.add(tab_button[i]);
                    		break;	
     
                    	case 15 :	
                    		 this.tab_button[i].addActionListener(new MultiListener());
                    		 this.tab_button[i].setPreferredSize(dim2);
                    		 this.panOperateur.add(tab_button[i]);
                    		break;
     
                    	case 16 :
                    		 this.tab_button[i].addActionListener(new DivListener());
                    		 this.tab_button[i].setPreferredSize(dim2);
                    		 this.panOperateur.add(tab_button[i]);
                    		break;
                    	  // dans le cas où l'on n'a pas cliqué sur un bouton qui représente un opérateur                  	
                    	default :
                    		 this.tab_button[i].addActionListener(new ChiffreListener());
                    		 this.panChiffre.add(tab_button[i]);
     
                    		break;
                    }// fin de switch
     
                }// fin de for
     
                 this.panEcran.add(ecran);
                 //this.panEcran.setBorder(BorderFactory.createLineBorder(Color.black));
     
                 this.container.add(panEcran, BorderLayout.NORTH);
                 this.container.add(panChiffre, BorderLayout.CENTER);
                 this.container.add(panOperateur, BorderLayout.EAST);
     
        }// fin de initComposants
     
     
        public void calcul(){
                if( this.operateur.equals("+") )
                {
                	//la classe Double "enveloppe" une valeur du type primitf double en une instance du type Double 
                	//la classe Double propose plusieurs méthodes de conversion d'un String en Double ou d'un Double en String, ce qui n'est pas le cas pour le type double primitif.
                	//La méthode parseDouble de la classe Double permet justement la conversion d'un String en Double
     
                	//la variable chiffre va contenir la valeur saisie dans le label convertie en Double
     
                         this.chiffre = chiffre + Double.parseDouble(ecran.getText()); 
     
    			 //la méthode String valueOf(double d) de la classe String est une méthode statique
    			//C'est pour cette raison que lorsqu'on l'appelle on met devant le nom de la classe et non pas le nom d'une instance de la classe String
                	//Elle permet de retourner une instance de type String qui est la conversion d' une valeur de type double
                	//qui est celle du paramètre de type double convertie en type String 
     
                         //this.ecran.setText(String.valueOf(chiffre));
                }
     
     
                if( this.operateur.equals("-"))
                {
    			this.chiffre = chiffre - Double.parseDouble(ecran.getText()); 
                         //this.chiffre = chiffre - Double.valueOf(ecran.getText()).doubleValue();
                        // this.ecran.setText(String.valueOf(chiffre));
                }               
     
                if( this.operateur.equals("*"))
                {
                         //this.chiffre = chiffre * Double.valueOf(ecran.getText()).doubleValue();
    			 this.chiffre = chiffre * Double.parseDouble(ecran.getText());
                        // this.ecran.setText(String.valueOf(chiffre));
                }       
     
                if( this.operateur.equals("/"))
                {
                        try{
                                 //this.chiffre = chiffre / Double.valueOf(ecran.getText()).doubleValue();
    				  this.chiffre = chiffre / Double.parseDouble(ecran.getText());
    				  this.ecran.setText(String.valueOf(chiffre));
     
                        }// fin de try 
    			catch(ArithmeticException e){
                        	//dans le cas où il est demandé une  division par 0, le chiffre 0 ( de type caractère)
                        	//s'affiche dans le JLabel ecran
                                 this.ecran.setText("0");
                        }// fin de catch
     
        }// fin de if ( this.operateur.equals("/"))
     
    }// fin de méthode calcul
     
     
     
        //permet l'affichage dans le JLabel ecran , du chiffre sur lequel on a cliqué 
        class ChiffreListener implements ActionListener{
     
                        @Override
                        public void actionPerformed(ActionEvent e) {
     
     
                        	//lorqu'on a clické sur un bouton qui n'est pas le bouton d'un opérateur, donc lorsqu'on a cliqué sur un chiffre, 
                        	//il se crée une instance de la classe ActionEvent
                        	//On récupère l'adresse de cette instance dans la variable e de type ActionEvent.
                        	//Ensuite, on apelle la méthode getSource de la classe ActionEvent.
                        	//Celle-ci permet de retourner le bouton( c'est à dire l'instance de la classe JButton)sur lequel on a cliqué
                        	//l'appel de la méthode getText, appliqué à ce bouton, permet de retourner le texte écrit sur le bouton sur lequel on a cliqué
                        	//Ce texte est affecté à la variable str
     
                                String str = ((JButton)e.getSource()).getText();
     
        			//update est = true quand on a cliqué sur un opérateur , ce qui permet d'effacer le chiffre saisi auparavant
                                //if(update) teste si la variable update contient true et donc teste si on est dans une situation où 
                                //on a cliqué auparavant sur un opérateur 
                               // si c'est le cas, on reinitialise simplement la variable update à false, pour permette  la saisie du chiffre en cours 
                                if(update)
                                {
                                        update = false;
                                }
                                else
        			//dans le cas où update est déjà à false, c'est à dire par exemple lorsqu'on commence la saisie de l'expression numérique,
        			//alors on affiche simplement le contenu de la variable str
                                {
        			// si le Jlabel ecran ne contient pas le chiffre 0 ,  la variable str qui contient la chaine de 
                                //caractères à afficher,  va contenir ce qui existe déjà à l'écran dans le Jlabel + 
                                //le chiffre du bouton sur lequel on a cliqué(exemple affichage du nombre 87)
                                        if(!ecran.getText().equals("0"))
                                                str = ecran.getText() + str;
                                }
     
                                ecran.setText(str);
                        }
     
                }// fin de class ChiffreListener
     
        class EgalListener implements ActionListener{
      	  //Au moment où l'utilisateur clique sur le bouton "=", la variable operateur  contient normalement "+" ou "-" ou "*" ou "/"
      	                 @Override
      	                 public void actionPerformed(ActionEvent arg0) {
      	 			// du fait que la variable operateur contient les opérateurs "+" ou "-" ou "*" ou "/" quand on clique sur "=",
      	 			//une opération d'addition ,de multiplication,  de soustraction ou de division 
      	 			//doit s'executer quand on clique sur le bouton "=".
      	 			//C'est ce qui justifie l'appel de la méthodoe calcul
      	 			 calcul();
     
      	 			 //quand on clique sur l' opérateur  = après la saisie d'un chiffre, cela efface le chiffre 
      	                 	 // pour afficher un resultat 
      	                 	 //et update = true;
      	                 	 update = true;
      	 			 //on considère que l'opérateur = n'est pas un opérateur qui permet de faire des calculs; 
      	 			 //il permet  simplement d'afficher  un resultat
      	                         //quand on clique dessus , la variable clicOperateur vaut donc false
     
      	                         clicOperateur = false;
      	                 }// fin de actionPerformed
     
      	         }// fin de EgalListener
     
        class PlusListener implements ActionListener{
     
      	    @Override
      	    public void actionPerformed(ActionEvent arg0) {
     
      	 try{
     
      	           //la variable clicOperateur vaut true lorsqu'on a déjà cliqué précédemment sur un opérateur "-" ou "*"ou  "+"ou  "/" 
      	            //c'est à dire lorsqu'on a déjà fait une première opération 
      	            if(clicOperateur)
      	            {
      		//si la variable operateur contient déjà un opérateur,:"-" ou "*"ou  "+"ou  "/" , on doit alors appeler la méthode calcul
      		//qui va calculer le resultat précédent
      		//ex:si clicOperateur == true, je suis par exemple dans cette situation 3*3+ : j'appelle la méthode calcul, 
      		//qui teste l'opérateur existant(c'est à dire  ici l'operateur *) pour effectuer la multiplcation 3*3
      	                    calcul();
      		 // conversion en String de la valeur contenue dans la variable chiffre, pour pouvoir afficher  cette valeur 
      	        		//dans le label ecran, qui ne peut accepter que des données de type String
     
      	                    ecran.setText(String.valueOf(chiffre));
      	            }
      	            else
     
      	//Si on est dans les cas suivants 
      	//- on clique pour la première fois sur l'opérateur + , la variable clicOperateur vaut false  du fait qu'elle est initialisée avec cette valeur
     
      	            //On doit donc la faire passer à true avec l'instruction qui suit:clicOperateur = true;
     
      	//-on a cliqué précédemment sur le signe" = ", ce qui a provoqué que la variable clicOperateur = false, on doit alors la faire passer à true
     
      	//la variable chiffre vaut simplement ce qui est saisi dans le JLabel ecran( pas encore de resultat calculé)
      	            {
      	                   //chiffre = Double.valueOf(ecran.getText()).doubleValue();
      	       chiffre = Double.parseDouble(ecran.getText());
     
      	                   clicOperateur = true;
      	            }
      	// je ne fais passer la variable operateur à la valeur + qu'après avoir effectué le calcul qui tient compte du fait de l'opérateur existant
      	// c'est à dire dans l'exemple  présent, l'opérateur * 
      	            operateur = "+";
      	 //après la saisie de l'opérateur +  on efface le chiffre à l'écran et donc update passe à  true
      	            update = true;
     
     
      	}// fin de try 
      	catch(NumberFormatException NFex){
      	System.out.println("Attention!! vous n'avez pas saisi de chiffre");
      	ecran.setText("0");
      	}// fin de catch
     
      	 catch(Exception ex){
      	    	System.out.println("Une erreur inattendue s'est produite");	
      	    	ecran.setText("0");
      	    }// fin de deuxièmpe catch
      	 }// fin de actionPerformed
     
      	}// fin de classe PlusListener
     
     
     
        class DivListener implements ActionListener{
     
            @Override
            public void actionPerformed(ActionEvent arg0) {
    		try{
    		//la variable clicOperateur vaut true lorsqu'on a déjà cliqué précédemment sur un opérateur "-" ou "*"ou  "+"ou  "/" 
                    //c'est à dire lorsqu'on a déjà fait une première opération 
     
     
                    if(clicOperateur)
    		//si la variable operateur contient déjà un opérateur,:"-" ou "*"ou  "+"ou  "/" , on doit alors appeler la méthode calcul
    		//qui va calculer le resultat précédent
    		//ex:si clicOperateur == true, je suis par exemple dans cette situation 12* 4 / : j'appelle la méthode calcul, 
    		//qui teste l'opérateur existant(c'est à dire  ici l'operateur *) pour effectuer la multiplcation 12 * 4 
                    {
                            calcul();
                            ecran.setText(String.valueOf(chiffre));
                    }
                    else
     
    		//Si on est dans les cas suivants 
    		//- on clique pour la première fois sur l'opérateur / , la variable clicOperateur vaut false  du fait qu'elle est initialisée avec cette valeur
                    //On doit donc la faire passer à true avec l'instruction qui suit:clicOperateur = true;
     
    		//-on a cliqué précédemment sur le signe" = ", ce qui a provoqué que la variable clicOperateur = false, on doit alors la faire passer à true
     
    		//la variable chiffre vaut simplement ce qui est saisi dans le JLabel ecran( pas encore de resultat calculé)
                    {
                            chiffre = Double.valueOf(ecran.getText()).doubleValue();
                            clicOperateur = true;
     
                    }
    		// je ne fais passer la variable operateur à la valeur / qu'après avoir effectué le calcul qui tient compte du fait de l'opérateur existant
    		// c'est à dire dans l'exemple  présent, l'opérateur * 
                    operateur = "/";
    		 //après la saisie de l'opérateur /  on efface le chiffre à l'écran et donc update passe à  true
                    update = true;
     
     
     
    	}// fin de try 
    	catch(NumberFormatException Nfex){
            	System.out.println("Attention!! vous n'avez pas saisi de chiffre");
    				ecran.setText("0");
     
            }// fin de catch 
            catch(Exception ex){
            	System.out.println("Une erreur inattendue s'est produite");	
            	ecran.setText("0");
            }// fin de deuxièmpe catch
     
    }// fin de actionPerformed
     
    }// fin de classe DivListener
     
        class MoinsListener implements ActionListener{
     
            @Override
            public void actionPerformed(ActionEvent arg0) {
     
    		try{
     
                    if(clicOperateur)
                    {
     
    			//si la variable operateur contient déjà un opérateur,:"-" ou "*"ou  "+"ou  "/" , on doit alors appeler la méthode calcul
    			//qui va calculer le resultat précédent
    			//ex:si clicOperateur == true, je suis par exemple dans cette situation 3*3- : j'appelle la méthode calcul, 
    			//qui teste l'opérateur existant(c'est à dire  ici l'operateur *) pour effectuer la multiplcation 3*3
    		        calcul();
                            ecran.setText(String.valueOf(chiffre));
                    }// fin de if 
                    else
    		//Si on est dans les cas suivants 
    		//- on clique pour la première fois sur l'opérateur -, la variable clicOperateur vaut false  du fait qu'elle est initialisée avec cette valeur
    		//On doit donc la faire passer à true avec l'instruction qui suit:clicOperateur = true;
     
    		//-on a cliqué précédemment sur le signe" = ", ce qui a provoqué que la variable clicOperateur = false, on doit alors la faire passer à true
     
    		//la variable chiffre vaut simplement ce qui est saisi dans le JLabel ecran( pas encore de resultat calculé)
     
                    {
                           // chiffre = Double.valueOf(ecran.getText()).doubleValue();
    			chiffre = Double.parseDouble(ecran.getText());
                            clicOperateur = true;
                    }// fin de else 
     
    	      // je ne fais passer la variable operateur à la valeur - qu'après avoir effectué le calcul qui tient compte du fait de l'opérateur existant
    		// c'est à dire dans l'exemple  présent, l'opérateur * 
    	      operateur = "-";
    		 //après la saisie de l'opérateur "-"  on efface le chiffre à l'écran et donc update passe à  true
                    update = true;
    		 //la variable clicOperateur vaut true lorsqu'on a déjà cliqué précédemment sur un opérateur "-" ou "*"ou  "+"ou  "/" 
                    //c'est à dire lorsqu'on a déjà fait une première opération 
     
    	}// fin de try
     
    	catch(NumberFormatException Nfex){
            	System.out.println("Attention!! vous n'avez pas saisi de chiffre");
    				ecran.setText("0");
     
            }// fin de catch 
            catch(Exception ex){
            	System.out.println("Une erreur inattendue s'est produite");	
            	ecran.setText("0");
            }// fin de deuxièmpe catch
     
    }// fin de actionPerformed
     
    }// fin de classe MoinsListener
     
        class MultiListener implements ActionListener{
     
            @Override
            public void actionPerformed(ActionEvent arg0) {
    		try{
    	//la variable clicOperateur vaut true lorsqu'on a déjà cliqué précédemment sur un opérateur  quel qu'il soit : "*" ,"/", "+", "-" 
            //c'est à dire lorsqu'on a déjà fait une première opération 
                    if(clicOperateur)
                    {
    		//si la variable operateur contient déjà un opérateur,:"-" ou "*"ou  "+"ou  "/" , on doit alors appeler la méthode calcul
    		//qui va calculer le resultat précédent
    		//ex:si clicOperateur == true, je suis par exemple dans cette situation 3+3* : j'appelle la méthode calcul, 
    		//qui teste l'opérateur existant(c'est à dire  ici l'operateur +) pour effectuer la multiplcation 3+3
                            calcul();
                            ecran.setText(String.valueOf(chiffre));
                    }
    		//Si on est dans les cas suivants 
    		//- on clique pour la première fois sur l'opérateur * , la variable clicOperateur vaut false  du fait qu'elle est initialisée avec cette valeur
                    //On doit donc la faire passer à true avec l'instruction qui suit:clicOperateur = true;
     
    		//-on a cliqué précédemment sur le signe" = ", ce qui a provoqué que la varaible clicOperateur = false, on doit alors la faire passer à true
     
    		//la variable chiffre vaut simplement ce qui est saisi dans le JLabel ecran( pas encore de resultat calculé)
                    else
                    {
                           // chiffre = Double.valueOf(ecran.getText()).doubleValue();
    			chiffre = Double.parseDouble(ecran.getText());
                            clicOperateur = true;
                    }
    		// je ne fais passer la variable operateur à la valeur * qu'après avoir effectué le calcul qui tient compte du fait de l'opérateur existant
    		// c'est à dire dans l'exemple  présent, l'opérateur + 
                    operateur = "*";
    		 //après la saisie de l'opérateur *  on efface le chiffre à l'écran et donc update passe à  true
                    update = true;
     
     
    		}// fin de try 
     
    		catch(NumberFormatException Nfex){
            	System.out.println("Attention!! vous n'avez pas saisi de chiffre");
    				ecran.setText("0");
     
            }// fin de catch 
            catch(Exception ex){
            	System.out.println("Une erreur inattendue s'est produite");	
            	ecran.setText("0");
            }// fin de deuxièmpe catch
     
        }// fin de actionPerformed
     
    }// fin de classe MultiListener
     
        class ResetListener implements ActionListener{
     
            @Override
            public void actionPerformed(ActionEvent arg0) {
    		try{
    		//quand on appuie sur le bouton Reset, la variable clicOperateur repasse
    		//puisqu'on n'a pas cliqué sur un opérateur tel que "+", "-", "*", "/" 
                    clicOperateur = false;
    		//update passe à true, puisqu'on va effacer tou ce qui est dans le JLabel ecran
                    update = true;
    		//la varaible chiffre est réinitialisée à true
                    chiffre = 0;
    		//la variable operateur eszt égaelement réinitialisée avec sa valeur par défaut =""
                    operateur = "";
    		//e JLabel ecran contient la chaîne de caractères vide
                    ecran.setText("");
            }// fin de try 
     
    	catch(Exception ex){
    		System.out.println("Une erreur inattendue s'est produite");
    		 ecran.setText("0");
     
    	}// fin de catch
     
    }// fin de actionPerformed
     
    }// fin de classe ResetListener
     
    }// fin de classe Calculatrice
    Voici le code de la classe Main associée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    public class Main {
    	public static void main(String[] args) {
        Calculatrice calculette = new Calculatrice();
     
        }// fin de méthode 
    }// fin de classe
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Bonjour,

    Citation Envoyé par new_wave Voir le message
    C:\Java\Test\Test_06_04_2012\src\package_calculatrice>javac Main.java
    Main.java:5: cannot find symbol
    symbol : class Calculatrice
    location: class package_calculatrice.Main
    Calculatrice calculette = new Calculatrice();
    ^
    Main.java:5: cannot find symbol
    symbol : class Calculatrice
    location: class package_calculatrice.Main
    Calculatrice calculette = new Calculatrice();
    ^
    2 errors
    en faite le compilateur est simplet il cherche la class Calculatrice dans le package package_calculatrice pour lui c'est donc ./package_calculatrice/Calculatrice.java se qui n'est pas le cas ici (puisqu'on est deja dans le repertoire package_calculatrice)

    il faut executer "javac package_calculatrice\Main.java" depuis le repertoire src.

  6. #6
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Suites de l'exercice:
    - séparer le graphique du fonctionnel et créer une interface MoteurCalcul qui implantera les calculs
    - utiliser des gestionnaires de disposition (plutot que des Dimensions)
    - envoyer les erreurs dans une fenêtre
    - utiliser un nom de package au standard Java...
    bon courage ....

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    970
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 970
    Points : 141
    Points
    141
    Par défaut compilation d'une application
    Bonsoir,

    Je te remercie de ces conseils.

    Pour ce qui est du gestionnaire de disposition, veux tu dire les layout manager?

    Et ensuite utiliser des méthodes propres à ces layout manager pour dimensionner les Jcomponent tels que les Jbutton ?

    Dernier point, j'ai un souci pour que lorsqu'on divise par 0, cela déclenche bien une erreur, comme cela est prévu dans le code; à la place de cela, on voit s'afficher "infinity" dans le JLabel nommé ecran.

    Merci de bien vouloir m'aider à résoudre ce problème.

    Cordialement.
    new wave

  8. #8
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par new_wave Voir le message
    Bonsoir,

    Je te remercie de ces conseils.

    Pour ce qui est du gestionnaire de disposition, veux tu dire les layout manager?

    Et ensuite utiliser des méthodes propres à ces layout manager pour dimensionner les Jcomponent tels que les Jbutton ?
    oui, laisse faire les layout managers: ils sont chargés des dimensionnements
    Dernier point, j'ai un souci pour que lorsqu'on divise par 0, cela déclenche bien une erreur, comme cela est prévu dans le code; à la place de cela, on voit s'afficher "infinity" dans le JLabel nommé ecran.
    division par zero est une erreur sur les entiers mais pas sur les flottants.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    970
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 970
    Points : 141
    Points
    141
    Par défaut layout manager et dimensionnement
    Bonjour et merci de ton aide.

    Le problème est que si je laisse faire le dimensionnement automatique, aurais-je la place requise pour placer tous le composants graphiques nécessaires(boutons du panneau des opérateurs etc...)

    Te remerciant de ta réponse,

    Cordialement.

    Nathalie

  10. #10
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par new_wave Voir le message
    Le problème est que si je laisse faire le dimensionnement automatique, aurais-je la place requise pour placer tous le composants graphiques nécessaires(boutons du panneau des opérateurs etc...)
    c'est le rôle fondamental des gestionnaires de disposition! bien sûr il faut choisir le bon et savoir les utiliser. le résultat doit être une disposition qui s'adapte automatiquement au matériel local et qui puisse "s'agrandir" si l'utilisateur le souhaite.
    un clavier de calculette simple se fait avec un GridLayout, plus complexe avec GridBagLayout (il y a encore plus sophistiqué). Bien sûr il faut apprendre à s'en servir mais c'est un apprentissage qui paye en terme de portabilité. sur différentes machines.

  11. #11
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    Le problème est que si je laisse faire le dimensionnement automatique, aurais-je la place requise pour placer tous le composants graphiques nécessaires(boutons du panneau des opérateurs etc...)
    Il faut essayer : c'est par l'expérimentation qu'on a la réponse à beaucoup de questions. Euh, tu programmes depuis 10 ans et tu ne sais pas ça ?

Discussions similaires

  1. [XL-2010] Et la boucle est difficile à écrire! (executer un code selon les valeurs d'une liste)
    Par Mikayel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/12/2014, 13h31
  2. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  3. [Kylix] Demarrer en cliquant sur l'executable ???
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 26/04/2002, 11h24
  4. [Kylix] Execution d'une application hors de l'edi
    Par Sadam Sivaller dans le forum EDI
    Réponses: 1
    Dernier message: 20/04/2002, 23h22
  5. Réponses: 2
    Dernier message: 17/03/2002, 19h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo