[java] bouton equal marche pas

Résolu/Fermé
domxaline - 28 août 2013 à 22:44
scinarf Messages postés 1119 Date d'inscription samedi 18 novembre 2006 Statut Membre Dernière intervention 25 septembre 2014 - 29 août 2013 à 11:20
Bonjour,
quand je clique sur bouton equal,le résultat s'affiche pas
par contraire,affichage disparait tout de suite,quel erreur j'avais fait?
quelqu'un peut aider svp
package Calcul;
public class Main 
{
    public static void main(String[] args) 
    {
        Calculatrice calculette=new Calculatrice();
    }
}
 
package Calcul;
import java.awt.Color ;
import java.awt.Dimension; 
import java.awt.Font; 
import java.awt.event.ActionListener ;
import java.awt.event.ActionEvent;
import java.awt.BorderLayout; 
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
public class Calculatrice extends JFrame 
{
 private JPanel container=new JPanel();
 String[]tab_string={"1","2","3","4","5","6","7","8","9","0",".","=","C","+","-","*","/"};
 JButton[]tab_button=new JButton[tab_string.length];
 
 private JLabel ecran=new JLabel();
 private Dimension dim=new Dimension(50,40);
 private Dimension dim2=new Dimension(50,31);
 private double chiffre1 ;
 private boolean clicOperateur=false,update=false;
 private String operateur="";
 
 public Calculatrice()
 {
	 this.setSize(240,260) ;
	 this.setTitle("Calculette") ;
	 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
	 this.setLocationRelativeTo(null) ;
	 this.setResizable(false) ;
	 initComposant();
 
	 this.setContentPane(container) ;
	 this.setVisible(true) ;
 }
 
 private void initComposant()
 {
	 Font police=new Font("Arial",Font.BOLD,20);
	 ecran=new JLabel("0");
	 ecran.setFont(police);
	 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));
	 JPanel panEcran=new JPanel();
	 panEcran.setPreferredSize(new Dimension(220,30));
 
	 for(int i=0;i<tab_string.length;i++)
	 {
		tab_button[i]=new JButton(tab_string[i]);
		tab_button[i].setPreferredSize(dim);
 
		switch(i)
		{
		  case 11:
			  tab_button[i].setForeground(Color.red);
			  tab_button[i].addActionListener(new ResetListener());
			  chiffre.add(tab_button[i]);
			  break;
		  case 12:
			  tab_button[i].addActionListener(new EgalListener());
			  operateur.add(tab_button[i]);
			  break;
		  case 13:
			  tab_button[i].addActionListener(new PlusListener());
			  tab_button[i].setPreferredSize(dim2);
			  operateur.add(tab_button[i]);
			  break;
		  case 14:
			  tab_button[i].addActionListener(new MoinsListener());
			  tab_button[i].setPreferredSize(dim2);
			  operateur.add(tab_button[i]);
			  break;
		  case 15:
			  tab_button[i].addActionListener(new MultiListener());
			  tab_button[i].setPreferredSize(dim2);
			  operateur.add(tab_button[i]);
			  break;
 
		  case 16:
			  tab_button[i].addActionListener(new DivListener());
			  tab_button[i].setPreferredSize(dim2);
			  operateur.add(tab_button[i]);
			  break;
		  default:
			  chiffre.add(tab_button[i]);
			  tab_button[i].addActionListener(new ChiffreListener());
			  break;
		}
	 }
 
 
	 panEcran.add(ecran);
	 panEcran.setBorder(BorderFactory.createLineBorder(Color.black));
	 container.add(panEcran,BorderLayout.NORTH);
	 container.add(chiffre,BorderLayout.CENTER);
	 container.add(operateur,BorderLayout.EAST);
 }
 private void calcul()
 {
	 if(operateur.equals("+"))
	 {
		 chiffre1=chiffre1+Double.valueOf(ecran.getText()).doubleValue();
		 ecran.setText(String.valueOf(chiffre1));
	 }
	 if(operateur.equals("-"))
	 {
		 chiffre1=chiffre1-Double.valueOf(ecran.getText()).doubleValue();
		 ecran.setText(String.valueOf(chiffre1));
	 }
	 if(operateur.equals("*"))
	 {
		 chiffre1=chiffre1*Double.valueOf(ecran.getText()).doubleValue();
		 ecran.setText(String.valueOf(chiffre1));
	 }
	 if(operateur.equals("/"))
	 {
		 try
		 {
		  chiffre1=chiffre1/Double.valueOf(ecran.getText()).doubleValue();
		  ecran.setText(String.valueOf(chiffre1));
	     }
	     catch(ArithmeticException e)
	     {
	      ecran.setText("0"); 
	     }
	 }	 
  }
  class ChiffreListener implements ActionListener
  {
	@Override
	public void actionPerformed(ActionEvent e) 
	{
		// on affiche le chiffre en plus dans le label
		String str=((JButton)e.getSource()).getText();
		if(update)
		{
			update=false;
		}
		else
		{
			if(!ecran.getText().equals("0")) str=ecran.getText()+str;
		}
		ecran.setText(str);		
	}
  }
//Listener affecté au bouton=
  class EgalListener implements ActionListener
  {
	  @Override
	  public void actionPerformed(ActionEvent arg0)
	  {
		calcul();
	    update=true;
		clicOperateur=false;	  
	  }
  }
  class PlusListener implements ActionListener
  {
	  @Override
	  public void actionPerformed(ActionEvent arg0)
	  {
		  if(clicOperateur)
		  {
			  calcul();
			  ecran.setText(String.valueOf(chiffre1));
		  }
		  else
		  {
			  chiffre1=Double.valueOf(ecran.getText()).doubleValue();
			  clicOperateur=true;
		  }
		  operateur="+";
		  update=true;
	  }
  }
  class MoinsListener implements ActionListener
  {
	  @Override
	  public void actionPerformed(ActionEvent arg0)
	  {
		  if(clicOperateur)
		  {
			  calcul();
			  ecran.setText(String.valueOf(chiffre1));
		  }
		  else
		  {
			  chiffre1=Double.valueOf(ecran.getText()).doubleValue();
			  clicOperateur=true;
		  }
		  operateur="-";
		  update=true;
	  }
  }
 
 
 
 
  class MultiListener implements ActionListener
  {
	  @Override
	  public void actionPerformed(ActionEvent arg0)
	  {
		  if(clicOperateur)
		  {
			  calcul();
			  ecran.setText(String.valueOf(chiffre1));
		  }
 
 
		  else
		  {
			  chiffre1=Double.valueOf(ecran.getText()).doubleValue();
			  clicOperateur=true;
		  }
		  operateur="*";
		  update=true;
	  }
  }
  class DivListener implements ActionListener
  {
	  @Override
	  public void actionPerformed(ActionEvent arg0)
	  {
		  if(clicOperateur)
		  {
			  calcul();
			  ecran.setText(String.valueOf(chiffre1));
		  }
		  else
		  {
			  chiffre1=Double.valueOf(ecran.getText()).doubleValue();
			  clicOperateur=true;
		  }
		  operateur="/";
		  update=true;
	  }
  }
  class ResetListener implements ActionListener
  {
	  @Override
	  public void actionPerformed(ActionEvent arg0)
	  {
		  clicOperateur=false;
		  update=true;
		  chiffre1=0;
		  operateur="";
		  ecran.setText("");		  
	  }
  }
}






A voir également:

2 réponses

scinarf Messages postés 1119 Date d'inscription samedi 18 novembre 2006 Statut Membre Dernière intervention 25 septembre 2014 252
29 août 2013 à 10:45
Bonjour,

Il me semble que l'erreur provient de la méthode initComposant() particulièrement dans le Switch

voici la tab_string :
String[]tab_string={"1","2","3","4","5","6","7","8","9","0",".","=","C","+","-","*","/"};

tab_button[11] = "="
tab_button[12] = "C"

les boutons "=" et "reset" sont inversés !

switch(i)
{
case 11:
tab_button[i].setForeground(Color.red);
tab_button[i].addActionListener(new ResetListener());
chiffre.add(tab_button[i]);
break;
case 12:
tab_button[i].addActionListener(new EgalListener());
operateur.add(tab_button[i]);
break;
case 13:
tab_button[i].addActionListener(new PlusListener());
tab_button[i].setPreferredSize(dim2);
operateur.add(tab_button[i]);
break;
case 14:
tab_button[i].addActionListener(new MoinsListener());
tab_button[i].setPreferredSize(dim2);
operateur.add(tab_button[i]);
break;
case 15:
tab_button[i].addActionListener(new MultiListener());
tab_button[i].setPreferredSize(dim2);
operateur.add(tab_button[i]);
break;

case 16:
tab_button[i].addActionListener(new DivListener());
tab_button[i].setPreferredSize(dim2);
operateur.add(tab_button[i]);
break;
default:
chiffre.add(tab_button[i]);
tab_button[i].addActionListener(new ChiffreListener());
break;
}




Pour l'opérateur/ je suis pas d'accord avec le raisonnement, il faut mieux prévenir d'une erreur que de récupérer une exception, donc il vaut mieux faire un test sur l'écran

if ecran.equals("0") plutôt que de faire un try/catch qui est plus couteux en temps de calcul.

Voila j'espère que c'est ça.
0
merci beaucoup
j'ai corrigé mon prg
0
scinarf Messages postés 1119 Date d'inscription samedi 18 novembre 2006 Statut Membre Dernière intervention 25 septembre 2014 252
29 août 2013 à 11:20
Marche t il maintenant ?


Au plaisir ;)
0