Code de gestion des opérations d'une calculatrice en java
stephanesamin
Messages postés
3
Statut
Membre
-
stephanesamin Messages postés 3 Statut Membre -
stephanesamin Messages postés 3 Statut Membre -
salut la famille escusez moi je suis un débutant en programmation java et voila que j voulu réaliser une calculatrice en java mais le problème est que j pu finir la partie interface graphique de la calculatrice mais j du mal a générer le code sur la partie calcul et j'ai vraiment bésoin d'un soutien compréhensible et précis de tel sorte a finir entièrement ma calculatrice. voici le code de l'interface graphique de la calculatrice.
//importation des classes utilisées pr créer une interface graphiqque
import javax.swing.*;
// importation des classes fournissant des fonctions de lectre au clavier
import java.io.*;
//importation du gestionnaire de disposition
import java.awt.*;
// déclaration de la classe
public class Calculatrice3 {
// Déclaration de tous les composants de la calculatrice.
JPanel fenêtr;
JTextField affich;
JButton bouton0;
JButton bouton1;
JButton bouton2;
JButton bouton3;
JButton bouton4;
JButton bouton5;
JButton bouton6;
JButton bouton7;
JButton bouton8;
JButton bouton9;
JButton boutonVirgule;
JButton boutonEgale;
JPanel panChif;
JPanel panOpé;
JButton boutonPlus;
JButton boutonMoins;
JButton boutonFois;
JButton boutondiv;
JButton boutonc;
JButton boutonoff;
JButton boutonon;
public Calculatrice3 (){
fenêtr = new JPanel();
BorderLayout disposi = new BorderLayout();
fenêtr.setBackground(Color.CYAN);
fenêtr.setLayout(disposi);
affich = new JTextField(30);
affich.enable(false);
fenêtr.add(affich,BorderLayout.NORTH);
bouton0 = new JButton("0");
bouton1 = new JButton("1");
bouton2 = new JButton("2");
bouton3 = new JButton("3");
bouton4 = new JButton("4");
bouton5 = new JButton("5");
bouton6 = new JButton("6");
bouton7 = new JButton("7");
bouton8 = new JButton("8");
bouton9 = new JButton("9");
boutondiv = new JButton ("\u00f7");
boutonVirgule = new JButton(",");
boutonEgale = new JButton("=");
boutonPlus = new JButton("+");
boutonMoins = new JButton("-");
boutonFois = new JButton("*");
boutonc = new JButton ("c");
boutonoff = new JButton ("OF");
boutonon = new JButton ("ON");
panChif = new JPanel();
GridLayout dispo2 = new GridLayout(3, 4);
panChif.setLayout(dispo2);
panChif.add(bouton1);
panChif.add(bouton2);
panChif.add(bouton3);
panChif.add(bouton4);
panChif.add(bouton5);
panChif.add(bouton6);
panChif.add(bouton7);
panChif.add(bouton8);
panChif.add(bouton9);
panChif.add(bouton0);
panChif.add(boutonEgale);
panChif.add(boutonc);
panChif.add(boutonoff);
panChif.add(boutonon);
panChif.add(boutonVirgule);
fenêtr.add(panChif ,BorderLayout.CENTER);
panOpé = new JPanel();
GridLayout dispo3 = new GridLayout(1,1);
panOpé.setLayout(dispo3);
panOpé.add(boutonPlus);
panOpé.add(boutonMoins);
panOpé.add(boutonFois);
panOpé.add(boutondiv);
fenêtr.add(panOpé , BorderLayout.EAST);
// déclaration de la fenêtre
JFrame frame = new JFrame(" ma première calculatrice en java ");
frame.setContentPane(fenêtr);
frame.setSize(400,300);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main (String [] args){
Calculatrice3 cal = new Calculatrice3 ();
}
}
3 réponses
-
Il faudrait au minimum que tu ajoutes des ActionListener à chacun de tes boutons pour savoir quand tu appuies dessus. Exemple :
bouton0.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //TODO } });
Après la manière de compléter la méthode dépend de comment tu veux faire tes calculs, si tu veux tout faire toi même, ou te servir d'outils déjà existant dans Java. -
ok merci mais n'empêche que j'ai éssayé d'utiliser les listener mais je m'en rend compte que lorsque j'exécute mon programme l'interface graphique de a calculatrice ainsi que l'éditeur se plante donc regarder ce code et dites moi ce qui ne va pas ds le code suivant :
1ère partie: code calculatrice
//importation des classes utilisées pr créer une interface graphiqque import javax.swing.*; //importation du gestionnaire de disposition import java.awt.*; import java.awt.event.*; // déclaration de la classe public class Calculatrice3 { // Déclaration de tous les composants de la calculatrice. JPanel fenêtr; JTextField affich; JButton bouton0; JButton bouton1; JButton bouton2; JButton bouton3; JButton bouton4; JButton bouton5; JButton bouton6; JButton bouton7; JButton bouton8; JButton bouton9; JButton boutonVirgule; JButton boutonEgale; JPanel panChif; JPanel panOpé; JButton boutonPlus; JButton boutonMoins; JButton boutonFois; JButton boutondiv; JButton boutonc; JButton boutonoff; JButton boutonon; public Calculatrice3 (){ fenêtr = new JPanel(); BorderLayout disposi = new BorderLayout(); fenêtr.setBackground(Color.CYAN); fenêtr.setLayout(disposi); affich = new JTextField(30); affich.enable(false); fenêtr.add(affich,BorderLayout.NORTH); bouton0 = new JButton("0"); bouton1 = new JButton("1"); bouton2 = new JButton("2"); bouton3 = new JButton("3"); bouton4 = new JButton("4"); bouton5 = new JButton("5"); bouton6 = new JButton("6"); bouton7 = new JButton("7"); bouton8 = new JButton("8"); bouton9 = new JButton("9"); boutondiv = new JButton ("\u00f7"); boutonVirgule = new JButton(","); boutonEgale = new JButton("="); boutonPlus = new JButton("+"); boutonMoins = new JButton("-"); boutonFois = new JButton("*"); boutonc = new JButton ("c"); boutonoff = new JButton ("OF"); boutonon = new JButton ("ON"); panChif = new JPanel(); GridLayout dispo2 = new GridLayout(3, 4); panChif.setLayout(dispo2); panChif.add(bouton1); panChif.add(bouton2); panChif.add(bouton3); panChif.add(bouton4); panChif.add(bouton5); panChif.add(bouton6); panChif.add(bouton7); panChif.add(bouton8); panChif.add(bouton9); panChif.add(bouton0); panChif.add(boutonEgale); panChif.add(boutonc); panChif.add(boutonoff); panChif.add(boutonon); panChif.add(boutonVirgule); fenêtr.add(panChif ,BorderLayout.CENTER); panOpé = new JPanel(); GridLayout dispo3 = new GridLayout(1,1); panOpé.setLayout(dispo3); panOpé.add(boutonPlus); panOpé.add(boutonMoins); panOpé.add(boutonFois); panOpé.add(boutondiv); fenêtr.add(panOpé , BorderLayout.EAST); // déclaration de la fenêtre JFrame frame = new JFrame(" ma première calculatrice en java "); frame.setContentPane(fenêtr); frame.setSize(400,300); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Création d'une instance du récepteur d'événements MoteurCalcul et transmettons au moteur une référence à elle-même. MoteurCalcul motcalc = new MoteurCalcul (this); bouton0.addActionListener(motcalc); bouton1.addActionListener(motcalc); bouton2.addActionListener(motcalc); bouton3.addActionListener(motcalc); bouton4.addActionListener(motcalc); bouton5.addActionListener(motcalc); bouton6.addActionListener(motcalc); bouton7.addActionListener(motcalc); bouton8.addActionListener(motcalc); bouton9.addActionListener(motcalc); boutonEgale.addActionListener(motcalc); boutonc.addActionListener(motcalc); boutondiv.addActionListener(motcalc); boutonFois.addActionListener(motcalc); boutonPlus.addActionListener(motcalc); boutonMoins.addActionListener(motcalc); boutonVirgule.addActionListener(motcalc); } public static void main (String [] args){ Calculatrice3 cal = new Calculatrice3 (); } }
2ème partie : classe filleimport java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JOptionPane; import javax.swing.JButton; import java.text.NumberFormat; //importation des classes permettant de connaître la position actuelle de l'analyse en cours import java.text.ParsePosition; public class MoteurCalcul extends Calculatrice3 implements ActionListener{ Calculatrice3 par; // une référence à la fenêtre Calculatrice3 char actionSélectionnée = ' '; // +, -, /, ou * double résultat = 0; // un objet capable de lire et présenter les nombres NumberFormat formatNombres = NumberFormat.getInstance(); // Le constructeur stocke la référence à la fenêtre Calculatrice3 dans la variable membre par MoteurCalcul(final Calculatrice3 par) { this.par = par; } public void actionPerformed(ActionEvent événement) { // Retrouve la source de l'action JButton boutonCliqué = (JButton) événement.getSource(); String affich = par.affich.getText(); double valeurAffichée = 0; // Retrouve le nombre présenté dans le champ texte s'il n'est pas vide if (!"".equals(affich)) { valeurAffichée = // analyse la chaîne de caractères formatNombres.parse(affich, new ParsePosition(0) /* ne sert pas */). // puis donne sa valeur en tant que double doubleValue(); } Object sourceEvénement = événement.getSource(); /* Pour chaque bouton d'action, mémorise l'action sélectionnée, +, -, /, ou *, stocke la valeur courante dans la variable résultatCourant et vide le champ /Affichage avant l'entrée du nombre suivant */ if (sourceEvénement == par.boutonPlus) { actionSélectionnée = '+'; résultat = valeurAffichée; par.affich.setText(""); } else if (sourceEvénement == par.boutonMoins) { actionSélectionnée = '-'; résultat = valeurAffichée; par.affich.setText(""); } else if (sourceEvénement == par.boutondiv) { actionSélectionnée = '\u00f7'; résultat = valeurAffichée; par.affich.setText(""); } else if (sourceEvénement == par.boutonFois) { actionSélectionnée = '*'; résultat = valeurAffichée; par.affich.setText(""); } else if (sourceEvénement == par.boutonEgale) { // Effectue les calculs en fonction de actionSélectionnée // Modifie la valeur de la variable résultatCourant // et affiche le résultat if (actionSélectionnée == '+') { résultat += valeurAffichée; // Convertit le résultat en le transformant en String // à l'aide de formatNombres par.affich.setText( formatNombres.format(résultat)); } else if (actionSélectionnée == '-') { résultat -= valeurAffichée; par.affich.setText(formatNombres.format(résultat)); } else if (actionSélectionnée == '\u00f7') { résultat /= valeurAffichée; par.affich.setText(formatNombres.format(résultat)); } else if (actionSélectionnée == '*') { résultat *= valeurAffichée; par.affich.setText(formatNombres.format(résultat)); } } else { // Pour tous les boutons on ajoute le libellé du bouton au champ texte String libelléBoutonCliqué = boutonCliqué.getText(); par.affich.setText(affich + libelléBoutonCliqué); } } }-
Ton affichage bug parce que le constructeur de Calculatrice3 est appelé par les objets MoteurCalcul, donc tu créés une infinité de fenêtre en même temps, ce qui plante l'affichage.
En fait j'imaginais quelque chose de plus simple pour ton problème, au lieu d'avoir un gros Listener qui fait tout une succession de if/else, il suffirait de faire des petits Listener pour chacune des touches, en passant par exemple par un StringBuilder qui accumulerait les caractères entrés, jusqu'au moment du calcul.
final StringBuilder sb = new StringBuilder();
bouton0.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
sb.append("0");
}
});
bouton1.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
sb.append("1");
}
});
// ...
boutonEgale.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
sb.replace(0, sb.length(), calculer(sb.toString()));
}
});
En fait il y aurait même encore plus simple, en faisant un tableau de JButton pour la plupart de tes touches. Par exemple avec un bouton[0], bouton[1]... à la place de bouton0, bouton1... comme ça un certain nombres d'opérations se simplifieraient avec une boucle for.
-
-
ok c fai mais di moi kske je dois faire pr ne plus que mon application ne se plante plus car je ne trouve vraimen pas la solution donc stp montre moi le chemin et indique moi clairement ce que je dois faire. merçi d'avance