Forum du groupe H

Forum d'entraide pour le groupe H de l'IUT informatique de Lannion.
 
AccueilAccueil  CalendrierCalendrier  FAQFAQ  RechercherRechercher  MembresMembres  GroupesGroupes  S'enregistrerS'enregistrer  Connexion  

Partager | 
 

 [Java] Calculatrice

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Kage



Messages: 30
Date d'inscription: 26/11/2009
Age: 20
Localisation: Lesneven

MessageSujet: [Java] Calculatrice   Sam 24 Avr - 17:23

Salut bande de geeks.

Bon, je poste ici le code d'un petit projet, une petite calculette graphique, codée en Java. Comme ça, ceux qui désirent prendre un peu d'avance
n'auront qu'à examiner mon code, vous verrez il n'y a rien de compliqué qu'on on connait les bases de la prog objet !

En plus, la calculette est rose, c'est quand même la classe cheers .

Voila un petit screen :



Et le code :

Main.java
Code:
 
public class Main {
   public static void main(String[] args) {
      Window window = new Window();
   }
}




Window.java
Code:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class Window extends JFrame {
   
   private JPanel container = new JPanel();
   private JLabel ecran = new JLabel();
   
   private String[] tabChiffres = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ".", "=", "C", "+", "-", "*", "/"};
   private Button[] tabButtons = new Button[tabChiffres.length];
   private Dimension dim = new Dimension(50, 40);
   private Dimension dim2 = new Dimension(50, 31);
   private double result;
   private String operator = "";
   private boolean update = true;
   private boolean clicOperator = false;
   
   /*
    *   WINDOW()
    */
   public Window() {
      //propriétés de la fenêtre
      this.setTitle("Calcumour <3");
        this.setSize(250, 270);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        init();
       
        this.setContentPane(container);
        this.setVisible(true);
   }

   /*
    *    INIT()
    */
   private void init() {
      //chiffres de l'écran
      Font font = new Font("Arial", Font.BOLD, 20);
      ecran = new JLabel("0");
      ecran.setFont(font);
      ecran.setHorizontalAlignment(JLabel.RIGHT);
      ecran.setPreferredSize(new Dimension(210,20));
      
      //écran contenant les chiffres
      JPanel panScreen = new JPanel();
      panScreen.add(ecran);
      panScreen.setBorder(BorderFactory.createLineBorder(Color.black));
      panScreen.setPreferredSize(new Dimension(220,30));
      panScreen.setBackground(Color.PINK);
      
      //création des boutons
      JPanel numbers = new JPanel();
      numbers.setPreferredSize(new Dimension(165,225));
      JPanel operators = new JPanel();
      operators.setPreferredSize(new Dimension(55,225));
      
      for (int i=0; i<tabChiffres.length; i++) {
         tabButtons[i] = new Button(tabChiffres[i]);
         tabButtons[i].setPreferredSize(dim);
         //tabButtons[i].setBackground(Color.PINK);
         
         switch (i)
         {
            // =
            case 11 :
               numbers.add(tabButtons[i]);
               tabButtons[i].addActionListener(new EgalListener());
            break;
            
            // reset
            case 12 :
               operators.add(tabButtons[i]);
               tabButtons[i].setPreferredSize(dim2);
               tabButtons[i].setForeground(Color.green);
               tabButtons[i].addActionListener(new ClearListener());
            break;
            
            // addition
            case 13 :
               operators.add(tabButtons[i]);
               tabButtons[i].setPreferredSize(dim2);
               tabButtons[i].addActionListener(new PlusListener());
            break;
            
            // soustraction
            case 14 :
               operators.add(tabButtons[i]);
               tabButtons[i].setPreferredSize(dim2);
               tabButtons[i].addActionListener(new MoinsListener());
            break;
            
            // multiplication
            case 15 :
               operators.add(tabButtons[i]);
               tabButtons[i].setPreferredSize(dim2);
               tabButtons[i].addActionListener(new MultiListener());
            break;
            
            // division
            case 16 :
               operators.add(tabButtons[i]);
               tabButtons[i].setPreferredSize(dim2);
               tabButtons[i].addActionListener(new DivListener());
            break;
            
            default :
               numbers.add(tabButtons[i]);
               tabButtons[i].addActionListener(new NumberListener());
            break;
         }
      }
      
      
      //ajout des composants à la fenêtre
      container.add(panScreen, BorderLayout.NORTH);
      container.add(numbers, BorderLayout.CENTER);
      container.add(operators, BorderLayout.EAST);
   }
   
   /*
    *  CALCUL()
    */
   private void calcul() {
      if (operator.equals("+")) {
         result = result + Double.valueOf(ecran.getText()).doubleValue();
         ecran.setText(String.valueOf(result));
      }
      if (operator.equals("-")) {
         result = result - Double.valueOf(ecran.getText()).doubleValue();
         ecran.setText(String.valueOf(result));
      }
      if (operator.equals("*")) {
         result = result * Double.valueOf(ecran.getText()).doubleValue();
         ecran.setText(String.valueOf(result));
      }
      if (operator.equals("/")) {
         try{
                result = result / Double.valueOf(ecran.getText()).doubleValue();
                ecran.setText(String.valueOf(result));
         } catch(ArithmeticException e){
            ecran.setText("0");
         }
      }
   }
   
   
   /*****************************************************************************/
   /*                              LISTENERS                                  */
   /*****************************************************************************/
   
   class NumberListener implements ActionListener {
      
      public void actionPerformed(ActionEvent arg0) {
         String str = ((JButton)arg0.getSource()).getText();
         
         if (update) {  //si il faut mettre à jour l'écran (reset)
            if (str == ".") {  //si on appuit en premier sur la touche point
               str = ecran.getText() + str;
               ecran.setText(str);
            }
            else {
               ecran.setText(str);
            }
            update = false;
         }
         else {  //si il faut continuer à écrire
            str = ecran.getText() + str;
            ecran.setText(str);
         }
      }
   }
   
   class ClearListener implements ActionListener {

      public void actionPerformed(ActionEvent arg0) {
         ecran.setText("0");
         update = true;         
      }
      
   }
   
   class PlusListener implements ActionListener {

      public void actionPerformed(ActionEvent arg0) {
         if (clicOperator) {
            calcul();
            ecran.setText(String.valueOf(result));
         }
         else {
            result = Double.valueOf(ecran.getText()).doubleValue();
            clicOperator = true;
         }
         operator = "+";
         update = true;         
      }
      
   }
   
   class EgalListener implements ActionListener {

      public void actionPerformed(ActionEvent arg0) {
         calcul();
         update = true;
         clicOperator = false;
         operator = "";
      }
      
   }
   
   class MoinsListener implements ActionListener {

      public void actionPerformed(ActionEvent arg0) {
         if (clicOperator) {
            calcul();
            ecran.setText(String.valueOf(result));
         }
         else {
            result = Double.valueOf(ecran.getText()).doubleValue();
            clicOperator = true;
         }
         operator = "-";
         update = true;
      }
      
   }
   
   class MultiListener implements ActionListener {

      public void actionPerformed(ActionEvent arg0) {
         if (clicOperator) {
            calcul();
            ecran.setText(String.valueOf(result));
         }
         else {
            result = Double.valueOf(ecran.getText()).doubleValue();
            clicOperator = true;
         }
         operator = "*";
         update = true;         
      }
      
   }
   
   class DivListener implements ActionListener {

      public void actionPerformed(ActionEvent arg0) {
         if (clicOperator) {
            calcul();
            ecran.setText(String.valueOf(result));
         }
         else {
            result = Double.valueOf(ecran.getText()).doubleValue();
            clicOperator = true;
         }
         operator = "/";
         update = true;            
      }
      
   }
   
   
}




Button.java
Code:

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
 
import javax.imageio.ImageIO;
import javax.swing.JButton;
 
 
public class Button extends JButton implements MouseListener{
 
    private String name;
    private Image img;
       
    public Button(String str){
            super(str);
            this.name = str;
           
            try {
                img = ImageIO.read(new File("back.png"));
            } catch (IOException e) {
                e.printStackTrace();
            }
           
           
            //Avec cette instruction, notre objet va s'écouter lui-même
            //Dès qu'un événement de la souris sera intercepté, il sera au courant
            this.addMouseListener(this);                 
    }
   
    public void paintComponent(Graphics g){ 
            Graphics2D g2d = (Graphics2D)g;
           
            g2d.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
           
            g2d.setColor(Color.black);
            g2d.drawString(this.name, this.getWidth() / 2 - (this.getWidth() / 2 /4), (this.getHeight() / 2) + 5);
           
    }

   
    //on clique
    @Override
   public void mouseClicked(MouseEvent arg0) {
      // TODO Auto-generated method stub
      
   }

   //survol de la souris
    @Override
    public void mouseEntered(MouseEvent arg0) {
      try {
          img = ImageIO.read(new File("survol.png"));
        } catch (IOException e) {
          e.printStackTrace();
        }
      
   }

   //la souris quitte la zone
    @Override
    public void mouseExited(MouseEvent arg0) {
      try {
          img = ImageIO.read(new File("back.png"));
        } catch (IOException e) {
          e.printStackTrace();
        }
      
   }

   //clic gauche pressé
    @Override
    public void mousePressed(MouseEvent arg0) {
      try {
             img = ImageIO.read(new File("click.png"));
           } catch (IOException e) {
             e.printStackTrace();
           }
      
   }

   //clic gauche relaché
    @Override
    public void mouseReleased(MouseEvent event) {
       //si la souris est toujours sur le bouton
       if (event.getY() > 0) {
          try {
             img = ImageIO.read(new File("survol.png"));
          } catch (IOException e) {
             e.printStackTrace();
          }
       }
       //si la souris est en dehors du bouton
       else {
          try {
             img = ImageIO.read(new File("back.png"));
          } catch (IOException e) {
             e.printStackTrace();
          }
       }
   }
 
}





Voila, si vous avez des questions sur mon code (il est loin d'être parfait ^^), hésitez pas.

Bonnes fin de vacances à tous, tchous flower !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
ezano
Admin


Messages: 59
Date d'inscription: 25/11/2009
Age: 22
Localisation: Lannion

MessageSujet: Re: [Java] Calculatrice   Mar 27 Avr - 19:18

Houuu mais j'avais pas vu ça Very Happy

Effectivement, la GUI à pas l'air très difficile à programmer. Comme pour la plupart des bibli graphique, le truc chiant c'est le nombre de méthodes/fonctions à retenir, au vu du code, Swing et AWT ont l'air bien fournit à ce niveau la.

Un détail cependant :
Code:
this.setTitle("Calcumour <3");


lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://forum-du-groupe-h.forumactif.com
Kage



Messages: 30
Date d'inscription: 26/11/2009
Age: 20
Localisation: Lesneven

MessageSujet: Re: [Java] Calculatrice   Mer 28 Avr - 9:10

Bah ouai, c'est la classe =p xD.

Sinon pour les fonctions, ya pas forcément besoin de les apprendre par coeur, fin de les retenir quoi. C'est assez logique comme utilisation.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
 

[Java] Calculatrice

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

 Sujets similaires

-
» Ma calculatrice sait écrire !!!! XDDD
» sumatra java Bali en stop 1984
» R-Wan, chanteur de Java
» la java de Brodway
» R.Stevie Moore le 17/7 à la Java Paris

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum du groupe H :: Unité d'enseignement 1 :: Algorithmie-