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

SWT/JFace Java Discussion :

Debuggage de classes


Sujet :

SWT/JFace Java

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut Debuggage de classes
    Bonjour,

    Je travaille actuellement sur un petit projet de création d'une calculatrice.

    Au débuggage , je passe régulièrement par des fichiers qui sont étrangers à mon projet (ce ne sont pas des classes du projet) telles que le fichier AbstractButton.class.

    Pour débugger, j'ai mis des points d'arrêt où cela m'intéressait puis j' avance en appuyant sur les touches F5 (si je souhaite entrer dans le détail d'un fonction par exemple) ou F6 (si je ne souhaite pas entrer dans le détail d'un fonction).

    Je vous joins le code de mon application, qui consiste ne deux classes: Calculatrice et une classe Main.
    Pour information , j'ai placé des points d'arrêt devant la condition if operateur equals '*' de la méthode calcul et devant le code de la méthode calcul de la classe EgalListener.

    Merci beaucoup de bien vouloir m'aider sur ce point car je tourne en rond sans parvenir à débugger convenablement mon projet.

    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
    677
    678
    679
    680
    681
    682
    683
    684
     
    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;
     
    //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 . 
     
     
    //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;
     
    //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 java.awt.event.KeyListener;
    import java.awt.event.KeyEvent;
     
    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;
     
    import javax.swing.JOptionPane;
     
     
    public class Calculatrice extends JFrame implements KeyListener{
     
          // 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
          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
          JButton[] tab_button = new JButton[tab_string.length];
     
     
    	// 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 = new JPanel();
     
    	//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 = new JLabel();
     
    	//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 = new Dimension(50, 40);
     
    	//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 = new Dimension(50, 31);
     
     
     
    	//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
          private 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 "="
         // private boolean clicOperateur = false, update = false;
    	private boolean clicOperateur ;
    	private boolean update ; 
     
     
     
         // declaration de la variable operateur qui contient la valeur de l'opérateur courant
        private 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 explication
                  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		// reprendre explication
                  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_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 = "";
                  initComposants();
     
                  this.setContentPane(container);
                  this.setVisible(true);
          }// fin de constructeur
     
     
          public void keyPressed(KeyEvent evt) {
     
        		}
     
        		public void keyTyped(KeyEvent evt) { }
     
        		public void keyReleased(KeyEvent evt) { }
     
          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 = 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)
                  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)
                	ecran.setFont(police);
     
    		//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.
                  ecran.setHorizontalAlignment(JLabel.RIGHT);
                  ecran.setPreferredSize(new Dimension(220, 20));
     
                 /* JPanel operateur = new JPanel();        
                  operateur.setPreferredSize(new Dimension(55, 225));
                  JPanel chiffre = new JPanel();
                  chiffre.setPreferredSize(new Dimension(165, 225));*/
     
    	      this.panOperateur = new JPanel();        
                this.panOperateur.setPreferredSize(dim4);
     
                this.panChiffre = new JPanel();
                this.panChiffre.setPreferredSize(dim5);
     
                this.panEcran = new JPanel();
                this.panEcran.setPreferredSize(dim6);
     
     
     
                  for(int i = 0; i < tab_string.length; i++)
                  {
     
                      tab_button[i] = new JButton(tab_string[i]);
                      tab_button[i].setPreferredSize(dim1);
     
     
    		     //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
                      switch(i){
     
                      	case 11 :
                      		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 :
                      		tab_button[i].setForeground(Color.red);
    	                        tab_button[i].addActionListener(new ResetListener());
    	                        tab_button[i].setPreferredSize(dim2);
    				this.panOperateur.add(tab_button[i]);
     
                      		break;
     
                      	case 13 :
                      		tab_button[i].addActionListener(new PlusListener());
                      		tab_button[i].setPreferredSize(dim2);
    				this.panOperateur.add(tab_button[i]);
     
                      		break;
     
                      	case 14 :
                      		tab_button[i].addActionListener(new MoinsListener());
                      		tab_button[i].setPreferredSize(dim2);
    				this.panOperateur.add(tab_button[i]);
     
                      		break;	
     
                      	case 15 :	
                      		tab_button[i].addActionListener(new MultiListener());
                      		tab_button[i].setPreferredSize(dim2);
                      		this.panOperateur.add(tab_button[i]);
                      		break;
     
                      	case 16 :
                      		tab_button[i].addActionListener(new DivListener());
                      		tab_button[i].setPreferredSize(dim2);
                      		this.panOperateur.add(tab_button[i]);
                      		break;
     
                      	default :
     
                      		tab_button[i].addActionListener(new ChiffreListener());
    				 this.panChiffre.add(tab_button[i]);
                      		break;
                      }// fin de switch
     
                  }// fin de for 
     
                  panEcran.add(ecran);
                  panEcran.setBorder(BorderFactory.createLineBorder(Color.black));
     
                  container.add(panEcran, BorderLayout.NORTH);
                  container.add(panChiffre, BorderLayout.CENTER);
                  container.add(panOperateur, BorderLayout.EAST);
     
          }// fin de initcomposant
     
     
          private void calcul(){
     
    		try{	
                  if(operateur.equals("+"))
                  {
     
     
    			chiffre = chiffre + Double.parseDouble(ecran.getText());
                          ecran.setText(String.valueOf(chiffre));
    			//ecran.setText(chiffre1));
     
    		 }// fin de if (operateur.equals("+") 
     
     
                  if(operateur.equals("-"))
                  {
                         chiffre = chiffre - Double.parseDouble(ecran.getText());
     
                          ecran.setText(String.valueOf(chiffre));
                  }  // fin de if (operateur.equals("-"))          
     
                  if(operateur.equals("*"))
                  {
     
    			chiffre = chiffre * Double.parseDouble(ecran.getText());
     
                          ecran.setText(String.valueOf(chiffre));
                  } // fin de if (operateur.equals("*"))   
     
                  if(operateur.equals("/"))
                  {
                          try{
     
    			       chiffre = chiffre / Double.parseDouble(ecran.getText());
                                  ecran.setText(String.valueOf(chiffre));
                          }// fin de try 
    			catch(ArithmeticException e){
                                  ecran.setText("0");
                          }// fin de catch
                  }// fin de if(operateur.equals("/"))
     
     
    		}// fin de premier try
    		catch(NumberFormatException NFex){ //type et nom
     
    			JOptionPane.showMessageDialog(null, "<html><body><center><FONT COLOR =\"YELLOW\"><FONT SIZE=5> Vous avez saisi une valeur non numérique! </FONT></FONT></body></center>"  ,"type d'erreur commise", JOptionPane.ERROR_MESSAGE);		
     
    		     ecran.setText("0");
    		}// fin de catch 
          }// fin de fonction calcul 
     
          class ChiffreListener implements ActionListener{
     
    		       	//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
     
                  @Override
                  public void actionPerformed(ActionEvent e) {
                          //On affiche le chiffre en plus dans le label
                          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;
                          }// fin de else 
                          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;
                          }// fin de else 
     
                          ecran.setText(str);
                  }// fin de actionPerformed
     
          }// finde ChiffreListener
     
     
          class EgalListener implements ActionListener{
     
                  @Override
    		 //Au moment où l'utilisateur clique sur le bouton "=", la variable operateur  contient normalement "+" ou "-" ou "*" ou "/"
     
                  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éthode calcul
                          calcul();
     
    			 //quand on clique sur l' opérateur  = après la saisie d'un chiffre, cela indique que nous devons effacer le chiffre à l'écran
      	                 // 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));
                          }// fin de if  if(clicOperateur)
                          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 +  nous devons effacer 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 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));
                          }
                          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 -  nous devons effacer 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{
     
    		//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 
                  @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 + puisque pour l'instant on n'a pas affecté la valeur * à la variable operateur) pour effectuer la multiplcation 3+3
                          {
                                  calcul();
                                  ecran.setText(String.valueOf(chiffre));
                          }// fin de if 
    		//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é)
                          else
                          {
                                  chiffre = Double.valueOf(ecran.getText()).doubleValue();
                                  clicOperateur = true;
                          }// fin de else 
    		// je ne fais passer la variable operateur à la valeur * qu'après avoir effectué le calcul qui tient compte  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 *  nous devons effacer 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 DivListener implements ActionListener{
     
     
    		//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 
     
                  @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 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(ArithmeticException ArEx){
            	System.out.println("Attention!! vous ne pouvez pas diviser par 0");
    				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 ResetListener implements ActionListener{
     
                  @Override
    		//quand on appuie sur le bouton Reset, la variable clicOperateur repasse à false
    		//puisqu'on n'a pas cliqué sur un opérateur tel que "+", "-", "*", "/" 
                  public void actionPerformed(ActionEvent arg0) {
    			try{
    		 clicOperateur = false;
     
    		//update passe à true, puisqu'on va effacer tout ce qui est dans le JLabel ecran
                          update = true;
    			//la varaible chiffre est réinitialisée à 0.0
                          chiffre = 0.0;
    		//la variable operateur eszt égaelement réinitialisée avec sa valeur par défaut =""
                          operateur = "";
     
                          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
    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
     
     
    package package_calculatrice;
     
     
     
    public class Main {
     
            /**
             * @param args
             */
            public static void main(String[] args) {
            Calculatrice calculette = new Calculatrice();
     
            }
     
    }
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  2. #2
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    D'accord, tu nous explique ton cheminement pour débugger, mais quel est ton problème?

    Voilà, à+
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

Discussions similaires

  1. Classe pour la création d'un graphe xy
    Par Bob dans le forum MFC
    Réponses: 24
    Dernier message: 03/12/2009, 17h20
  2. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  3. Élaboration de classe
    Par il_a_ri dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 16/01/2003, 14h22
  4. Variable d'une Classe Ancêtre
    Par Génie dans le forum Langage
    Réponses: 3
    Dernier message: 18/09/2002, 19h24
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

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