2 votes

Changement de formulaire entre la calculatrice standard et la calculatrice scientifique à l'aide d'éléments de menu en Java

J'ai une calculatrice standard et une calculatrice scientifique créées en java, toutes deux avec des barres de menu et les éléments de menu "standard" et "scientifique" pour passer de l'une à l'autre, mais je n'arrive pas à trouver comment faire pour que la calculatrice change réellement lorsque l'on clique sur les options.

Code jusqu'à présent :

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

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class regCalc implements ActionListener 
{    
    JFrame frame = new JFrame ("Standard Calculator");

    //JPanels for standard and scientific
    JPanel panelstand = new JPanel (new FlowLayout ()); 
    JPanel panelsci = new JPanel (new FlowLayout());

    JMenuBar menuBar = new JMenuBar();

    JMenu view = new JMenu ("View");
    JMenuItem standard = new JMenuItem("Standard");
    JMenuItem scientific = new JMenuItem("Scientific");

    JTextArea text = new JTextArea (1,20);

    JButton but1 = new JButton ("1");
    JButton but2 = new JButton ("2");
    JButton but3 = new JButton ("3");
    JButton but4 = new JButton ("4");
    JButton but5 = new JButton ("5");
    JButton but6 = new JButton ("6");
    JButton but7 = new JButton ("7");
    JButton but8 = new JButton ("8");
    JButton but9 = new JButton ("9");
    JButton but0 = new JButton ("0");

    JButton butAdd = new JButton ("+");
    JButton butSub = new JButton ("-");
    JButton butMult = new JButton ("*");
    JButton butDiv = new JButton ("/");
    JButton butEq = new JButton ("=");
    JButton butClear = new JButton ("C");

    Double number1, number2, result;
    int addc =0, subc=0, multc=0, divc=0;

    public void ui()
    {
    frame.setVisible(true);

    panelstand.setVisible(true);
    panelsci.setVisible(false);

    frame.setSize(270,230);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.setJMenuBar(menuBar);
    view.add(standard);
    view.add(scientific);
    menuBar.add(view);

    frame.add(panelstand);

    panelstand.add(text);

    panelstand.add(but1);
    panelstand.add(but2);
    panelstand.add(but3);
    panelstand.add(but4);
    panelstand.add(but5);
    panelstand.add(but6);
    panelstand.add(but7);
    panelstand.add(but8);
    panelstand.add(but9);
    panelstand.add(but0);

    panelstand.add(butAdd);
    panelstand.add(butSub);
    panelstand.add(butMult);
    panelstand.add(butDiv);
    panelstand.add(butEq);
    panelstand.add(butClear);

    but1.addActionListener(this);
    but2.addActionListener(this);
    but3.addActionListener(this);
    but4.addActionListener(this);
    but5.addActionListener(this);
    but6.addActionListener(this);
    but7.addActionListener(this);
    but8.addActionListener(this);
    but9.addActionListener(this);
    but0.addActionListener(this);

    butAdd.addActionListener(this);
    butSub.addActionListener(this);
    butMult.addActionListener(this);
    butDiv.addActionListener(this);
    butEq.addActionListener(this);
    butClear.addActionListener(this);   
}

    @Override
    public void actionPerformed(ActionEvent e) {

        Object source = e.getSource();

    if (source == but1)
    {
        text.append("1");
    }

    if (source == but2)
    {
        text.append("2");
    }

    if (source == but3)
    {
        text.append("3");
    }

    if (source == but4)
    {
        text.append("4");
    }

    if (source == but5)
    {
        text.append("5");
    }

    if (source == but6)
    {
        text.append("6");
    }

    if (source == but7)
    {
        text.append("7");
    }

    if (source == but8)
    {
        text.append("8");
    }

    if (source == but9)
    {
        text.append("9");
    }

    if (source == but0)
    {
        text.append("0");
    }

    if (source == butAdd)
    {
        number1=number_Reader();
        text.setText("");
        addc=1;
        subc=0;
        multc=0;
        divc=0;
    }

    if (source == butSub)
    {
        number1=number_Reader();
        text.setText("");
        addc=0;
        subc=1;
        multc=0;
        divc=0;
    }

    if (source == butMult)
    {
        number1=number_Reader();
        text.setText("");
        addc=0;
        subc=0;
        multc=1;
        divc=0;
    }

    if (source == butDiv)
    {
        number1=number_Reader();
        text.setText("");
        addc=0;
        subc=0;
        multc=0;
        divc=1;
    }

    if (source == butEq)
    {
        number2=number_Reader();
        if (addc > 0)
        {
            result = number1+number2;
            text.setText(Double.toString(result));
        }

        if (subc > 0)
        {
            result = number1-number2;
            text.setText(Double.toString(result));
        }

        if (multc > 0)
        {
            result = number1*number2;
            text.setText(Double.toString(result));
        }

        if (divc > 0)
        {
            result = number1/number2;
            text.setText(Double.toString(result));
        }
    }

    if (source == butClear)
    {
        number1=0.0;
        number2=0.0;
        text.setText("");
    }

    if (view == scientific)
    {
        frame.add(scientific);
    }

}

    public double number_Reader()
    {
        double num1;
        String s;
        s=text.getText();
        num1=Double.valueOf(s);
        return num1;
    }
}

5voto

berry120 Points 21945

Vous recherchez peut-être quelque chose comme CardLayout qui vous permet d'utiliser une mise en page pour passer d'un panneau à l'autre.

3voto

En fait, bien que je sois un grand promoteur de CardLayout, je voudrais vous demander d'envisager une alternative. Si vous réfléchissez au problème, vous verrez (du moins dans mon esprit) que vous ne voulez pas complètement changer mais plutôt d'augmenter ou de diminuer les vues, puisque la calculatrice standard n'est en fait qu'un sous-ensemble de la calculatrice scientifique. Il suffit donc d'afficher un JPanel supplémentaire avec les boutons scientifiques présents si la calculatrice scientifique est nécessaire, et de cacher le JPanel lorsque la calculatrice standard est nécessaire. Pour ce faire, il suffit d'ajouter les JPanels à une disposition appropriée, par exemple BorderLayout avec le JPanel standard ajouté BorderLayout.CENTER et le JPanel scientifique BorderLayout.PAGE_END, puis d'appeler setVisible(true) ou false sur le JPanel scientifique. Veillez à appeler repaint() sur le JPanel qui contient la calculatrice scientifique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X