Forum du groupe H
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Forum du groupe H

Forum d'entraide pour le groupe H de l'IUT informatique de Lannion.
 
AccueilAccueil  Dernières imagesDernières images  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  

 

 [Java] Calculatrice

Aller en bas 
2 participants
AuteurMessage
Kage

Kage


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

[Java] Calculatrice Empty
MessageSujet: [Java] Calculatrice   [Java] Calculatrice Icon_minitimeSam 24 Avr - 19: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 :

[Java] Calculatrice Screen10

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
ezano
Admin
ezano


Messages : 59
Date d'inscription : 26/11/2009
Age : 33
Localisation : Lannion

[Java] Calculatrice Empty
MessageSujet: Re: [Java] Calculatrice   [Java] Calculatrice Icon_minitimeMar 27 Avr - 21: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
https://forum-du-groupe-h.forumactif.com
Kage

Kage


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

[Java] Calculatrice Empty
MessageSujet: Re: [Java] Calculatrice   [Java] Calculatrice Icon_minitimeMer 28 Avr - 11: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
Contenu sponsorisé





[Java] Calculatrice Empty
MessageSujet: Re: [Java] Calculatrice   [Java] Calculatrice Icon_minitime

Revenir en haut Aller en bas
 
[Java] Calculatrice
Revenir en haut 
Page 1 sur 1

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