[Source]Calculator with both Standard and Scientific Mode

JackV

Administrator
Staff member
Calculator with both Standard and Scientific Mode
Hi vọng các bạn mới sử dụng source máy tinh này để tham khảo là chính.
Trích dẫn từ http://www.java.happycodings.com/Beginners_Lab_Assignments/code3.html:
Calculator with both Standard and Scientific Mode
PHP:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class calculator extends JFrame implements ActionListener
{
        JTextField jtx;
        double temp,temp1,result,a;
        static double m1,m2;
        int k=1,x=0,y=0,z=0;
        char ch;
        JButton
one,two,three,four,five,six,seven,eight,nine,zero,clr,pow2,pow3,exp;
        JButton
plus,min,div,lg,rec,mul,eq,plmi,poin,mr,mc,mp,mm,sqrt,sin,cos,tan;
        JMenuBar bar;
        JMenu view;
        JMenuItem exit;
        JRadioButtonMenuItem standard,scientific;
        JSeparator jp;
        ButtonGroup bg;
        Container cont;
        JPanel textPanel,syntpanel,buttonpanel;
        calculator()
        {
                cont=getContentPane();
                cont.setLayout(new BorderLayout());
                JPanel textpanel=new JPanel();
                Font font=new Font("Arial",Font.PLAIN,18);
                jtx=new JTextField(25);
                jtx.setFont(font);
                jtx.setHorizontalAlignment(SwingConstants.RIGHT);
                jtx.addKeyListener(new KeyAdapter()
                {
                 public void keyTyped(KeyEvent keyevent)
                 {
                 char c=keyevent.getKeyChar();
                 if(c>='0' && c<='9')
                 {
                 }
                 else
                 {
                 keyevent.consume();
                 }
                 }
                 });
                textpanel.add(jtx);
                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("View");

                standard =new JRadioButtonMenuItem("Standard",true);
                standard.setMnemonic('S');
                standard.addItemListener(new radiohandler());
                scientific =new JRadioButtonMenuItem("Sceintific");
                standard.setMnemonic('c');
                scientific.addItemListener(new radiohandler());
                jp=new JSeparator();
                exit=new JMenuItem("Exit");
                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);

                cont.add("Center",buttonpanel);
                cont.add("North",textpanel);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
class radiohandler implements ItemListener
{
public void itemStateChanged(ItemEvent ie)
  {
        AbstractButton button=(AbstractButton)ie.getItem();
        String label=button.getText();
        {
          if(label.equals("Standard"))
          {
                cont.remove(syntpanel);
                validate();
          }
        if(label.equals("Sceintific"))
          {
                cont.add("West",syntpanel);
                validate();
          }
        }
  }
}
public void actionPerformed(ActionEvent e)
{
        String s=e.getActionCommand();
        if(s.equals("Exit"))
        {
                System.exit(0);
        }
        if(s.equals("1"))
        {
        if(z==0)
        {
        jtx.setText(jtx.getText()+"1");
        }
        else
        {
        jtx.setText("");
        jtx.setText(jtx.getText()+"1");
        z=0;
        }
        }
        if(s.equals("2"))
        {
        if(z==0)
        {
        jtx.setText(jtx.getText()+"2");
        }
        else
        {
        jtx.setText("");
        jtx.setText(jtx.getText()+"2");
        z=0;
        }
        }
        if(s.equals("3"))
        {
        if(z==0)
        {
        jtx.setText(jtx.getText()+"3");
        }
        else
        {
        jtx.setText("");
        jtx.setText(jtx.getText()+"3");
        z=0;
        }
        }
        if(s.equals("4"))
        {
        if(z==0)
        {
        jtx.setText(jtx.getText()+"4");
        }
        else
        {
        jtx.setText("");
        jtx.setText(jtx.getText()+"4");
        z=0;
        }
        }
        if(s.equals("5"))
        {
        if(z==0)
        {
        jtx.setText(jtx.getText()+"5");
        }
        else
        {
        jtx.setText("");
        jtx.setText(jtx.getText()+"5");
        z=0;
        }
        }
        if(s.equals("6"))
        {
        if(z==0)
        {
        jtx.setText(jtx.getText()+"6");
        }
        else
        {
        jtx.setText("");
        jtx.setText(jtx.getText()+"6");
        z=0;
        }
        }
        if(s.equals("7"))
        {
        if(z==0)
        {
        jtx.setText(jtx.getText()+"7");
        }
        else
        {
        jtx.setText("");
        jtx.setText(jtx.getText()+"7");
        z=0;
        }
        }
        if(s.equals("8"))
        {
        if(z==0)
        {
        jtx.setText(jtx.getText()+"8");
        }
        else
        {
        jtx.setText("");
        jtx.setText(jtx.getText()+"8");
        z=0;
        }
        }
        if(s.equals("9"))
        {
        if(z==0)
        {
        jtx.setText(jtx.getText()+"9");
        }
        else
        {
        jtx.setText("");
        jtx.setText(jtx.getText()+"9");
        z=0;
        }
        }
        if(s.equals("0"))
        {
        if(z==0)
        {
        jtx.setText(jtx.getText()+"0");
        }
        else
        {
        jtx.setText("");
        jtx.setText(jtx.getText()+"0");
        z=0;
        }
        }
        if(s.equals("AC"))
        {
        jtx.setText("");
        x=0;
        y=0;
        z=0;
        }
        if(s.equals("log"))
        {
           if(jtx.getText().equals(""))
             {
                 jtx.setText("");
             }
           else
          {
                a=Math.log(Double.parseDouble(jtx.getText()));
                jtx.setText("");
                jtx.setText(jtx.getText() + a);
          }
        }
        if(s.equals("1/x"))
        {
           if(jtx.getText().equals(""))
             {
                 jtx.setText("");
             }
           else
             {
                  a=1/Double.parseDouble(jtx.getText());
                  jtx.setText("");
                  jtx.setText(jtx.getText() + a);
             }
        }
        if(s.equals("Exp"))
        {
          if(jtx.getText().equals(""))
            {
                 jtx.setText("");
            }
            else
            {
                 a=Math.exp(Double.parseDouble(jtx.getText()));
                 jtx.setText("");
                 jtx.setText(jtx.getText() + a);
            }
        }
        if(s.equals("x^2"))
        {
          if(jtx.getText().equals(""))
           {
                jtx.setText("");
           }
           else
           {
               a=Math.pow(Double.parseDouble(jtx.getText()),2);
               jtx.setText("");
               jtx.setText(jtx.getText() + a);
           }
        }
        if(s.equals("x^3"))
        {
          if(jtx.getText().equals(""))
          {
              jtx.setText("");
          }
          else
          {
              a=Math.pow(Double.parseDouble(jtx.getText()),3);
              jtx.setText("");
              jtx.setText(jtx.getText() + a);
          }
        }
        if(s.equals("+/-"))
        {
         if(x==0)
         {
              jtx.setText("-"+jtx.getText());
         x=1;
         }
         else
         {
              jtx.setText(jtx.getText());
         }
         }
        if(s.equals("."))
        {
         if(y==0)
         {
         jtx.setText(jtx.getText()+".");
         y=1;
         }
         else
         {
         jtx.setText(jtx.getText());
         }
         }
        if(s.equals("+"))
        {
          if(jtx.getText().equals(""))
           {
                jtx.setText("");
                temp=0;
                ch='+';
           }
        else
           {
                temp=Double.parseDouble(jtx.getText());
                jtx.setText("");
                ch='+';
                y=0;
                x=0;
           }
           jtx.requestFocus();
        }
        if(s.equals("-"))
        {
          if(jtx.getText().equals(""))
           {
                jtx.setText("");
                temp=0;
                ch='-';
           }
          else
           {
                x=0;
                y=0;
                temp=Double.parseDouble(jtx.getText());
                jtx.setText("");
                ch='-';
           }
             jtx.requestFocus();
        }
        if(s.equals("/"))
        {
          if(jtx.getText().equals(""))
           {
                jtx.setText("");
                temp=1;
                ch='/';
           }
        else
           {
                x=0;
                y=0;
                temp=Double.parseDouble(jtx.getText());
                ch='/';
                jtx.setText("");
           }
            jtx.requestFocus();
        }
        if(s.equals("*"))
        {
          if(jtx.getText().equals(""))
           {
                jtx.setText("");
                temp=1;
                ch='*';
           }
        else
           {
                x=0;
                y=0;
                temp=Double.parseDouble(jtx.getText());
                ch='*';
                jtx.setText("");
           }
            jtx.requestFocus();
        }
        if(s.equals("MC"))
          {
                m1=0;
                jtx.setText("");
          }
        if(s.equals("MR"))
        {
                jtx.setText("");
                jtx.setText(jtx.getText() + m1);
        }
        if(s.equals("M+"))
           {
                if(k==1)
                {
                m1=Double.parseDouble(jtx.getText());
                k++;
                }
                else
                {
                m1+=Double.parseDouble(jtx.getText());
                jtx.setText(""+m1);
                }
            }
        if(s.equals("M-"))
           {
                if(k==1)
                {
                m1=Double.parseDouble(jtx.getText());
                k++;
                }
                else
                {
                m1-=Double.parseDouble(jtx.getText());
                jtx.setText(""+m1);
                }
            }
            if(s.equals("Sqrt"))
            {
                if(jtx.getText().equals(""))
                {
                jtx.setText("");
                }
                else
                {
                a=Math.sqrt(Double.parseDouble(jtx.getText()));
                jtx.setText("");
                jtx.setText(jtx.getText() + a);
                }
            }
            if(s.equals("SIN"))
            {
                if(jtx.getText().equals(""))
                {
                jtx.setText("");
                }
                else
                {
                a=Math.sin(Double.parseDouble(jtx.getText()));
                jtx.setText("");
                jtx.setText(jtx.getText() + a);
                }
            }
            if(s.equals("COS"))
            {
                if(jtx.getText().equals(""))
                {
                jtx.setText("");
                }
                else
                {
                a=Math.cos(Double.parseDouble(jtx.getText()));
                jtx.setText("");
                jtx.setText(jtx.getText() + a);
                }
            }
            if(s.equals("TAN"))
            {
                if(jtx.getText().equals(""))
                {
                jtx.setText("");
                }
                else
                {
                a=Math.tan(Double.parseDouble(jtx.getText()));
                jtx.setText("");
                jtx.setText(jtx.getText() + a);
                }
            }
        if(s.equals("="))
       {
         if(jtx.getText().equals(""))
         {
              jtx.setText("");
         }
         else
         {
         temp1 = Double.parseDouble(jtx.getText());
         switch(ch)
         {
                case '+':
                result=temp+temp1;
                break;
                case '-':
                result=temp-temp1;
                break;
                case '/':
                result=temp/temp1;
                break;
                case '*':
                result=temp*temp1;
                break;
           }
                jtx.setText("");
                jtx.setText(jtx.getText() + result);
                z=1;
         }
         }
         jtx.requestFocus();
  }
public static void main(String args[])
        {
                calculator n=new calculator();
                n.setTitle("CALCULATOR");
                n.setSize(370,250);
                n.setResizable(false);
                n.setVisible(true);
        }
}
 

Scorpion06

Member
18/11/10
100
1
16
Ðề: [Source]Calculator with both Standard and Scientific Mode

Hay quá đi, cám ơn bác JackV nhiều. Thanks bác phát.
 

quangbeo216

Member
14/6/13
47
7
8
26
dòng code kinh khủng quá, anh ơi cho em hỏi là cái chương trình tính này anh tự viết code hay là có cả kéo thả nữa?
 

quangbeo216

Member
14/6/13
47
7
8
26
em đọc bài làm có 1 số phần tuy hiểu nó làm gì nhưng không biết ý nghĩa 1 số dòng code cho lắm, anh có thể giải thích hộ em đoạn này được không ạ
jtx.addKeyListener(new KeyAdapter()
{
public
void keyTyped(KeyEvent keyevent)
{
char c=keyevent.getKeyChar();
if(
c>='0' && c<='9')
{
}
else
{
keyevent.consume();
}
}
});

em biết đoạn này dùng để nhập số có thể từ bàn phím nhưng không hiểu được dòng " keyevent.consume()",

với lại một vấn đề nữa là ở chương trình thay đổi giao diện sử dụng
JRadioButtonMenuItem
ở cái này thì khi chọn 1 trong 2 thì chương trình vẫn chạy cả 2 cái, có nghĩa là ở phần sự kiện thì 2 cái chạy 1 lúc nếu chọn 1 trong 2 nhưng em thấy giao diện vẫn thay đổi có 1 lần, em vẫn không hiểu lắm anh có thể giải thích hộ em với!!
 

quangbeo216

Member
14/6/13
47
7
8
26
anh xem lại phần code đoạn
class radiohandler implements ItemListener {

public void itemStateChanged(ItemEvent ie) {
AbstractButton button = (AbstractButton) ie.getItem();
String label = button.getText();
{
if (label.equals("Standard")) {
cont.remove(syntpanel);
validate();
}
if (label.equals("Sceintific")) {

cont.add("West", syntpanel);
validate();
System.out.println("123");
}
}
}
em thêm vào sự kiện của "Sceintific" là in ra màn hình 123 nhưng khi chọn là "Standard" thì vẫn hiện ra 123, có nghĩa là chọn cái này thì cái kia vẫn được chọn