Calculette simple en JAVA - Desoin d'aide

Javapasbien -  
 midou..6 -
Bonjour,

Débutante en java, je n'arrive pas à faire les calculs, quelqu'un peut m'aider ????

package calc;

/**
* <p>Titre : </p>
* <p>Description : Calculette</p>
* <p>Copyright : Copyright (c) 2007</p>
* <p>Société : LB</p>
* @author LB
* @version 1.0
*/


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class calculette
{
//fenetre principale
private JFrame fen;
//composants calculette
private JPanel jpFen01;
private JPanel jpFen02;
private JPanel jpFen03;
private JPanel jpFen04;
private JPanel jpFen05;
private JPanel jpFen06;

private JTextField jtxtSaisie;
private JButton jb1;
private JButton jb2;
private JButton jb3;
private JButton jb4;
private JButton jb5;
private JButton jb6;
private JButton jb7;
private JButton jb8;
private JButton jb9;
private JButton jb0;
//math
private JButton jbplus;
private JButton jbmoins;
private JButton jbmulti;
private JButton jbdiv;
private JButton jbegal;

private EcouteurBouton ecouteur;

public calculette()
{


fen = new JFrame("calculette");
fen.setSize(300, 300);//TAILLE
fen.setLocation(100, 100); //disposition de la fenetre à l'écran
fen.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{

System.exit(0);
}
});
//creation de l'interface
this.initIHM();
//gestion des evenements
this.listenerIHM();
//affichage de la calculette
fen.setVisible(true);
}

//methode initIHM

public void initIHM()
{

//instance des panneaux
jpFen01 = new JPanel();
jpFen02 = new JPanel();
jpFen03 = new JPanel();
jpFen04 = new JPanel();
jpFen05 = new JPanel();
jpFen06 = new JPanel();

//Instance du champ de saisie
jtxtSaisie = new JTextField();
//instance des boutons
jb1 = new JButton();
jb2 = new JButton();
jb3 = new JButton();
jb4 = new JButton();
jb5 = new JButton();
jb6 = new JButton();
jb7 = new JButton();
jb8 = new JButton();
jb9 = new JButton();
jb0 = new JButton();

jbplus = new JButton();
jbmoins = new JButton();
jbmulti = new JButton();
jbdiv = new JButton();
jbegal = new JButton();

//ajout "layout manager" a la fenetre principale
fen.getContentPane().setLayout(new GridLayout(9, 1));
//ajout champ de saisie
fen.getContentPane().add(jtxtSaisie);
//ajout layer management aux panneaux
jpFen01.setLayout(new GridLayout());
jpFen02.setLayout(new GridLayout());
jpFen03.setLayout(new GridLayout());
jpFen04.setLayout(new GridLayout());
jpFen05.setLayout(new GridLayout());
jpFen06.setLayout(new GridLayout());

//ajout des boutons
jb1.setText("1");
jb2.setText("2");
jb3.setText("3");
jb4.setText("4");
jb5.setText("5");
jb6.setText("6");
jb7.setText("7");
jb8.setText("8");
jb9.setText("9");
jb0.setText("0");

jbplus.setText("+");
jbmoins.setText("-");
jbmulti.setText("X");
jbdiv.setText("/");
jbegal.setText("=");

jpFen01.add(jb1);
jpFen01.add(jb2);
jpFen01.add(jb3);
jpFen02.add(jb4);
jpFen02.add(jb5);
jpFen02.add(jb6);
jpFen03.add(jb7);
jpFen03.add(jb8);
jpFen03.add(jb9);
jpFen04.add(jb0);

jpFen05.add(jbplus);
jpFen05.add(jbmoins);
jpFen05.add(jbmulti);
jpFen05.add(jbdiv);
jpFen06.add(jbegal);

fen.getContentPane().add(jpFen01);
fen.getContentPane().add(jpFen02);
fen.getContentPane().add(jpFen03);
fen.getContentPane().add(jpFen04);
fen.getContentPane().add(jpFen05);
fen.getContentPane().add(jpFen06);
}

//gestion du click sur boutons

public void listenerIHM()
{

ecouteur = new EcouteurBouton(this);
jb1.addMouseListener(ecouteur);
jb2.addMouseListener(ecouteur);
jb3.addMouseListener(ecouteur);
jb4.addMouseListener(ecouteur);
jb5.addMouseListener(ecouteur);
jb6.addMouseListener(ecouteur);
jb7.addMouseListener(ecouteur);
jb8.addMouseListener(ecouteur);
jb9.addMouseListener(ecouteur);
jb0.addMouseListener(ecouteur);
jbplus.addMouseListener(ecouteur);
jbmoins.addMouseListener(ecouteur);
jbmulti.addMouseListener(ecouteur);
jbdiv.addMouseListener(ecouteur);
jbegal.addMouseListener(ecouteur);

}
//methode zoneSaisieChiffre
public void zoneSaisieChiffre (String s)
{
this.jtxtSaisie.setText (this.jtxtSaisie.getText()+s);
}
//methode resultat
public void resultat (int r)
{
this.jtxtSaisie.setText (this.jtxtSaisie.getText()+r);
}

//prog principale
public static void main (String[]args)
{
calculette calc = new calculette ();
}
}
class EcouteurBouton implements MouseListener
{
int nb1=0;
int nb2=0;
int resultat=0;
String operateur=" ";

private calculette calc;
EcouteurBouton(calculette c)
{
calc = c;
}
public void mouseClicked (MouseEvent e)
{
calc.zoneSaisieChiffre(((JButton) e.getSource()).getText());
String saisie = ((JButton) e.getSource()).getText();
if (saisie == "="){
if (operateur == "+"){
resultat = nb1 + nb2;
}
if (operateur == "-"){
resultat = nb1 - nb2;
}
if (operateur == "X"){
resultat = nb1 * nb2;
}
if (operateur == "/"){
resultat = nb1 / nb2;
}
calc.resultat(resultat);
}else{
if ((saisie =="+")||(saisie =="-")||(saisie =="X")||(saisie =="/")){
operateur = saisie;
}else{
// calc.zoneSaisieChiffre(operateur);
Integer I = new Integer(saisie);
if (operateur != "") {
nb2 = I.intValue();
}
else {
nb1 = I.intValue();
}
}
}
}

public void mouseEntered (MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
}
}
A voir également:

4 réponses

Mat
 
Bonjour,

J'aurais quelques conseils à te donner...

Premièrement, tu initialises "opérateur" à " ", qui est un espace. Ensuite tu vérifies si cette variable est différente de "" (chaîne vide) pour voir si un opérateur a été appuyé. D'après moi "nb1" reste toujours à zéro, car l'opérateur n'est jamais une chaîne vide et donc c'est nb2 qui change toujours. De plus, tu ne réinitialises pas l'opérateur après chaque calcul.

Tu affiche le résultat en laissant tout ce qui a été écrit avant. Le setText devrait être "r" seulement.

La variable "resultat" devrait être autre chose qu'un int (peut-être un float) si tu espères faire des divisions. Sinon tu obtiendra des résultats comme "3/2=1". De toute façon avec des int tu ne pourrais même pas faire de calculs qui dépassent 32767.

Techniquement, le "==" ne devrait pas être utilisé pour comparer des chaînes de caractères. Il vaudrait mieux utiliser "operateur.equals()" ou "operateur.compareTo() == 0". Même chose pour "saisie".

Tu peux faire directement strToInt au lieu de créer un Integer avec la saisie et aller chercher l'intValue par la suite. Mais je te conseillerais de conserver le format en texte jusqu'au moment du calcul. De cette façon tu pourrais calculer avec des nombres et non des chiffres seulement. Avec ton code actuel, le chiffre qui est appuyé écrase le précédent, alors si tu veux faire 45+12, le résultat sera au mieux 7. Donc nb1 et nb2 seraient des String et le strToInt se ferait quand on appuie sur "=".

J'ai remarqué que tu assumais que la source du clic est un bouton en faisant tout de suite ta conversion de la source en JButton. Je crois qu'il se produira une erreur si tu fais un clic sur ailleurs que sur les boutons.

Les variales commencent aussi habituellement par une minuscule et les classes par une majuscule. Donc "I" devrait être "i" et "calculette" devrait être "Calculette".

J'espère que ça aide!
1
ray-J
 
Salut pourquoi tu utilises l'interface MouseListener alors que l'interface ActionListener est plus simple et plus pratique pour les boutons?
Je me suis lancé dans ton programme mais il exite trop de variables donc je n'y rien je vais essayer de faire quelques chos si je peux sinon revois ton code c'est tres complexe.
1
abdelali7891 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   1
 
tu px te servire de JBUILDER ca sera tres facile a cree, tu ne sera besoin k'a ecrir le code de la switch case dans levennement du clik du bouton egale + klk variable globale a ajouter
0
midou..6
 
vous pouvez tzlzcharger le code source de ma simple calculatrice java ;):
http://programmingeeks.blogspot.com/2012/06/mini-projet-calculatrice-java.html 
0