Publié le 13/11/2010
Auteur axel
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Afficher une calculatrice scientifique dans un JFrame

Comment construire une calculatrice scientifique en JAVA ? L'article ci-dessous est un exemple de calculatrice multi-fonction similaire à celle de Windows, c-a-d capable de faire des calculs simples (addition, soustraction, division et multiplication) et également d’exécuter des fonctions de trigonométrie.

Construire une calculatrice

calculette_scienceA partir des sources de K.Ramesh, voici un exemple de calculatrice similaire à celle de Windows avec un mode classique et un mode scientifique (cosinus, sinus, racine).

Quelles sont les étapes pour construire une calculatrice ?
- IHM: ajouter les 30 boutons, la zone d'édition et le menu au JFrame,
- évènement: centraliser tous les évènements des composants vers la fonctions actionPerformed(),
- calcul: insérer dans la fonction actionPerformed() les calculs à effectuer en fonction du bouton sélectionné.



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
/**
 * Calculatrice simple ou scientifique
 * @author K.Ramesh ramesh_cdm [at] hotmail.com
 */
public class calculator extends JFrame implements ActionListener {
 
    private JTextField consol;
    private double temp, temp1, result, a;
    private static double m1;
    private int k = 1, x = 0, y = 0, z = 0;
    private char operation;
    private JButton one, two, three, four, five, six, seven, eight, nine, zero, clr, pow2, pow3, exp;
    private JButton plus, min, div, lg, rec, mul, eq, plmi, poin, mr, mc, mp, mm, sqrt, sin, cos, tan;
    private JMenuBar bar;
    private JMenu view;
    private JMenuItem exit;
    private JRadioButtonMenuItem standard, scientific;
    private JSeparator jp;
    private ButtonGroup bg;
    private Container container;
    private JPanel syntpanel, buttonpanel;
 
    /**
     * Constructeur
     * Initialisation des boutons sur le JFrame
     */
    public calculator() {
        container = getContentPane();
        container.setLayout(new BorderLayout());
        JPanel textpanel = new JPanel();
        Font font = new Font("Arial", Font.PLAIN, 18);
        consol = new JTextField(25);
        consol.setFont(font);
        consol.setHorizontalAlignment(SwingConstants.RIGHT);
        consol.addKeyListener(new KeyAdapter() {
 
            public void keyTyped(KeyEvent keyevent) {
                char c = keyevent.getKeyChar();
                if (c >= '0' && c <= '9') {
                } else {
                    keyevent.consume();
                }
            }
        });
        textpanel.add(consol);
        buttonpanel = new JPanel();
        buttonpanel.setLayout(new GridLayout(5, 4, 2, 2));
        boolean t = true;
        syntpanel = new JPanel();
        syntpanel.setLayout(new GridLayout(5, 1));
        bar = new JMenuBar();
        view = new JMenu("Mode");
 
        standard = new JRadioButtonMenuItem("Simple", true);
        standard.setMnemonic('S');
        standard.addItemListener(new radiohandler());
        scientific = new JRadioButtonMenuItem("Scientifique");
        standard.setMnemonic('c');
        scientific.addItemListener(new radiohandler());
        jp = new JSeparator();
        exit = new JMenuItem("Quitter");
        standard.setMnemonic('E');
        exit.addActionListener(this);
        bg = new ButtonGroup();
        bg.add(standard);
        bg.add(scientific);
        view.add(standard);
        view.add(scientific);
        view.add(jp);
        view.add(exit);
        bar.add(view);
        setJMenuBar(bar);
 
        mr = new JButton("MR");
        buttonpanel.add(mr);
        mr.addActionListener(this);
        seven = new JButton("7");
        buttonpanel.add(seven);
        seven.addActionListener(this);
        eight = new JButton("8");
        buttonpanel.add(eight);
        eight.addActionListener(this);
        nine = new JButton("9");
        buttonpanel.add(nine);
        nine.addActionListener(this);
        clr = new JButton("AC");
        buttonpanel.add(clr);
        clr.addActionListener(this);
 
        mc = new JButton("MC");
        buttonpanel.add(mc);
        mc.addActionListener(this);
        four = new JButton("4");
        buttonpanel.add(four);
        four.addActionListener(this);
        five = new JButton("5");
        buttonpanel.add(five);
        five.addActionListener(this);
        six = new JButton("6");
        buttonpanel.add(six);
        six.addActionListener(this);
        mul = new JButton("*");
        buttonpanel.add(mul);
        mul.addActionListener(this);
 
        mp = new JButton("M+");
        buttonpanel.add(mp);
        mp.addActionListener(this);
        one = new JButton("1");
        buttonpanel.add(one);
        one.addActionListener(this);
        two = new JButton("2");
        buttonpanel.add(two);
        two.addActionListener(this);
        three = new JButton("3");
        buttonpanel.add(three);
        three.addActionListener(this);
        min = new JButton("-");
        buttonpanel.add(min);
        min.addActionListener(this);
 
        mm = new JButton("M-");
        buttonpanel.add(mm);
        mm.addActionListener(this);
        zero = new JButton("0");
        buttonpanel.add(zero);
        zero.addActionListener(this);
        plmi = new JButton("+/-");
        buttonpanel.add(plmi);
        plmi.addActionListener(this);
        poin = new JButton(".");
        buttonpanel.add(poin);
        poin.addActionListener(this);
        plus = new JButton("+");
        buttonpanel.add(plus);
        plus.addActionListener(this);
 
 
        rec = new JButton("1/x");
        buttonpanel.add(rec);
        rec.addActionListener(this);
        sqrt = new JButton("Sqrt");
        buttonpanel.add(sqrt);
        sqrt.addActionListener(this);
        lg = new JButton("log");
        buttonpanel.add(lg);
        lg.addActionListener(this);
        div = new JButton("/");
        div.addActionListener(this);
        buttonpanel.add(div);
        eq = new JButton("=");
        buttonpanel.add(eq);
        eq.addActionListener(this);
 
        sin = new JButton("SIN");
        syntpanel.add(sin);
        sin.addActionListener(this);
        cos = new JButton("COS");
        syntpanel.add(cos);
        cos.addActionListener(this);
        tan = new JButton("TAN");
        syntpanel.add(tan);
        tan.addActionListener(this);
        pow2 = new JButton("x^2");
        syntpanel.add(pow2);
        pow2.addActionListener(this);
        pow3 = new JButton("x^3");
        syntpanel.add(pow3);
        pow3.addActionListener(this);
        exp = new JButton("Exp");
        exp.addActionListener(this);
 
        container.add("Center", buttonpanel);
        container.add("North", textpanel);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
 
    /**
     * Evenement sur la sélection d'un element dans le menu
     */
    class radiohandler implements ItemListener {
 
        public void itemStateChanged(ItemEvent ie) {
            AbstractButton button = (AbstractButton) ie.getItem();
            String label = button.getText();
            {
                if (label.equals("Simple")) {
                    container.remove(syntpanel);
                    validate();
                }
                if (label.equals("Scientifique")) {
                    container.add("West", syntpanel);
                    validate();
                }
            }
        }
    }
 
    /**
     * Action générée sur l'appui d'une touche
     * @param e
     */
    public void actionPerformed(ActionEvent e) {
        String s = e.getActionCommand();
        if (s.equals("Quitter")) {
            System.exit(0);
        }
        if (s.equals("1")) {
            if (z == 0) {
                consol.setText(consol.getText() + "1");
            } else {
                consol.setText("");
                consol.setText(consol.getText() + "1");
                z = 0;
            }
        }
        if (s.equals("2")) {
            if (z == 0) {
                consol.setText(consol.getText() + "2");
            } else {
                consol.setText("");
                consol.setText(consol.getText() + "2");
                z = 0;
            }
        }
        if (s.equals("3")) {
            if (z == 0) {
                consol.setText(consol.getText() + "3");
            } else {
                consol.setText("");
                consol.setText(consol.getText() + "3");
                z = 0;
            }
        }
        if (s.equals("4")) {
            if (z == 0) {
                consol.setText(consol.getText() + "4");
            } else {
                consol.setText("");
                consol.setText(consol.getText() + "4");
                z = 0;
            }
        }
        if (s.equals("5")) {
            if (z == 0) {
                consol.setText(consol.getText() + "5");
            } else {
                consol.setText("");
                consol.setText(consol.getText() + "5");
                z = 0;
            }
        }
        if (s.equals("6")) {
            if (z == 0) {
                consol.setText(consol.getText() + "6");
            } else {
                consol.setText("");
                consol.setText(consol.getText() + "6");
                z = 0;
            }
        }
        if (s.equals("7")) {
            if (z == 0) {
                consol.setText(consol.getText() + "7");
            } else {
                consol.setText("");
                consol.setText(consol.getText() + "7");
                z = 0;
            }
        }
        if (s.equals("8")) {
            if (z == 0) {
                consol.setText(consol.getText() + "8");
            } else {
                consol.setText("");
                consol.setText(consol.getText() + "8");
                z = 0;
            }
        }
        if (s.equals("9")) {
            if (z == 0) {
                consol.setText(consol.getText() + "9");
            } else {
                consol.setText("");
                consol.setText(consol.getText() + "9");
                z = 0;
            }
        }
        if (s.equals("0")) {
            if (z == 0) {
                consol.setText(consol.getText() + "0");
            } else {
                consol.setText("");
                consol.setText(consol.getText() + "0");
                z = 0;
            }
        }
        if (s.equals("AC")) {
            consol.setText("");
            x = 0;
            y = 0;
            z = 0;
        }
        if (s.equals("log")) {
            if (consol.getText().equals("")) {
                consol.setText("");
            } else {
                a = Math.log(Double.parseDouble(consol.getText()));
                consol.setText("");
                consol.setText(consol.getText() + a);
            }
        }
        if (s.equals("1/x")) {
            if (consol.getText().equals("")) {
                consol.setText("");
            } else {
                a = 1 / Double.parseDouble(consol.getText());
                consol.setText("");
                consol.setText(consol.getText() + a);
            }
        }
        if (s.equals("Exp")) {
            if (consol.getText().equals("")) {
                consol.setText("");
            } else {
                a = Math.exp(Double.parseDouble(consol.getText()));
                consol.setText("");
                consol.setText(consol.getText() + a);
            }
        }
        if (s.equals("x^2")) {
            if (consol.getText().equals("")) {
                consol.setText("");
            } else {
                a = Math.pow(Double.parseDouble(consol.getText()), 2);
                consol.setText("");
                consol.setText(consol.getText() + a);
            }
        }
        if (s.equals("x^3")) {
            if (consol.getText().equals("")) {
                consol.setText("");
            } else {
                a = Math.pow(Double.parseDouble(consol.getText()), 3);
                consol.setText("");
                consol.setText(consol.getText() + a);
            }
        }
        if (s.equals("+/-")) {
            if (x == 0) {
                consol.setText("-" + consol.getText());
                x = 1;
            } else {
                consol.setText(consol.getText());
            }
        }
        if (s.equals(".")) {
            if (y == 0) {
                consol.setText(consol.getText() + ".");
                y = 1;
            } else {
                consol.setText(consol.getText());
            }
        }
        if (s.equals("+")) {
            if (consol.getText().equals("")) {
                consol.setText("");
                temp = 0;
                operation = '+';
            } else {
                temp = Double.parseDouble(consol.getText());
                consol.setText("");
                operation = '+';
                y = 0;
                x = 0;
            }
            consol.requestFocus();
        }
        if (s.equals("-")) {
            if (consol.getText().equals("")) {
                consol.setText("");
                temp = 0;
                operation = '-';
            } else {
                x = 0;
                y = 0;
                temp = Double.parseDouble(consol.getText());
                consol.setText("");
                operation = '-';
            }
            consol.requestFocus();
        }
        if (s.equals("/")) {
            if (consol.getText().equals("")) {
                consol.setText("");
                temp = 1;
                operation = '/';
            } else {
                x = 0;
                y = 0;
                temp = Double.parseDouble(consol.getText());
                operation = '/';
                consol.setText("");
            }
            consol.requestFocus();
        }
        if (s.equals("*")) {
            if (consol.getText().equals("")) {
                consol.setText("");
                temp = 1;
                operation = '*';
            } else {
                x = 0;
                y = 0;
                temp = Double.parseDouble(consol.getText());
                operation = '*';
                consol.setText("");
            }
            consol.requestFocus();
        }
        if (s.equals("MC")) {
            m1 = 0;
            consol.setText("");
        }
        if (s.equals("MR")) {
            consol.setText("");
            consol.setText(consol.getText() + m1);
        }
        if (s.equals("M+")) {
            if (k == 1) {
                m1 = Double.parseDouble(consol.getText());
                k++;
            } else {
                m1 += Double.parseDouble(consol.getText());
                consol.setText("" + m1);
            }
        }
        if (s.equals("M-")) {
            if (k == 1) {
                m1 = Double.parseDouble(consol.getText());
                k++;
            } else {
                m1 -= Double.parseDouble(consol.getText());
                consol.setText("" + m1);
            }
        }
        if (s.equals("Sqrt")) {
            if (consol.getText().equals("")) {
                consol.setText("");
            } else {
                a = Math.sqrt(Double.parseDouble(consol.getText()));
                consol.setText("");
                consol.setText(consol.getText() + a);
            }
        }
        if (s.equals("SIN")) {
            if (consol.getText().equals("")) {
                consol.setText("");
            } else {
                a = Math.sin(Double.parseDouble(consol.getText()));
                consol.setText("");
                consol.setText(consol.getText() + a);
            }
        }
        if (s.equals("COS")) {
            if (consol.getText().equals("")) {
                consol.setText("");
            } else {
                a = Math.cos(Double.parseDouble(consol.getText()));
                consol.setText("");
                consol.setText(consol.getText() + a);
            }
        }
        if (s.equals("TAN")) {
            if (consol.getText().equals("")) {
                consol.setText("");
            } else {
                a = Math.tan(Double.parseDouble(consol.getText()));
                consol.setText("");
                consol.setText(consol.getText() + a);
            }
        }
        if (s.equals("=")) {
            if (consol.getText().equals("")) {
                consol.setText("");
            } else {
                temp1 = Double.parseDouble(consol.getText());
                switch (operation) {
                    case '+':
                        result = temp + temp1;
                        break;
                    case '-':
                        result = temp - temp1;
                        break;
                    case '/':
                        result = temp / temp1;
                        break;
                    case '*':
                        result = temp * temp1;
                        break;
                }
                consol.setText("");
                consol.setText(consol.getText() + result);
                z = 1;
            }
        }
        consol.requestFocus();
    }
 
    /**
     * Exemple
     * @param args
     */
    public static void main(String args[]) {
        calculator n = new calculator();
        n.setTitle("Calculatrice scientifique");
        n.setSize(370, 250);
        n.setResizable(false);
        n.setVisible(true);
    }
}

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - class
Mise a jour
13/11/2010
Visualisation
vu 5933 fois
Public
Internaute
Auteur de la publication
Axel
Membre junior
Auteur de 51 articles
|BIO_PSEUDO|
Commentaires récents

Publié par nabil23 dans CMS

j\'arrive pas e telecharger les icons

Publié par Laurent dans java

Merci :)
Teste sous Linux CentOS, fonctionne mais ne recouvre pas la barre des taches.

Publié par Verkork dans java

Le probleme c'est que ce code ne convient pas quand une partie de la page est dynamique, ie qu'elle est rafraichit toutes les minutes par exemple. Par exemple pour une telle page, c'est...

Publié par etoiliste010 dans java

BONSOIR le code compile mais
Grave: null
com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. gd4sm1845967wib.6

at com.sun.mail.smtp.SMTPTransport.i...

Publié par Fobec dans CMS

Norton emet une alerte de type 'Suspicious.Cloud', hasard de compilation ou menace serieuse ? Faites attention en installant le logiciel.<br>Merci JM de l'avoir signaler.