GUI编程网格布局实现简单计算器

1.效果图:
在这里插入图片描述
功能基本都能实现,只是集中方法的特殊情况没有实现,像/0.
2.代码实现:

package note;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class Calculate {
	TextField tf = new TextField(40);       
    StringBuffer s1 = new StringBuffer();   
    StringBuffer s2 = new StringBuffer();   
    static String flag = new String();      
    boolean start = true;   
 
    public void init(){
        //主界面
    	
        JFrame f = new JFrame("计算器");
        f.setSize(800, 800);
        JPanel p1 = new JPanel();
        p1.add(tf);
        f.add(p1,BorderLayout.NORTH);
        JPanel p2 = new JPanel();
        p2.setLayout(new GridLayout(1,3));
        //动作监听器
        ActionListener listen =new ActionListener() {
 
            public void actionPerformed(ActionEvent arg0) {
 
                //输入数字0~9
                if(arg0.getActionCommand()=="0"){
 
                    if(!s1.toString().equals(new String())){
                        if(!start){
                            //s1清零,保证可以重新输入数字
                            s1.delete(0, s1.length());
                        }
                        start = true;
                        tf.setText(s1.append("0").toString());
                    }   
                }
                if(arg0.getActionCommand()=="1"){
                    if(!start){
                        s1.delete(0, s1.length());
                    }
                    start = true;
                    tf.setText(s1.append("1").toString());
                }
                if(arg0.getActionCommand()=="2"){
                    if(!start){
                        s1.delete(0, s1.length());
                    }
                    start = true;
                    tf.setText(s1.append("2").toString());
                }
                if(arg0.getActionCommand()=="3"){
                    if(!start){
                        s1.delete(0, s1.length());
                    }
                    start = true;
                    tf.setText(s1.append("3").toString());
                }
                if(arg0.getActionCommand()=="4"){
                    if(!start){
                        s1.delete(0, s1.length());
                    }
                    start = true;
                    tf.setText(s1.append("4").toString());
                }
                if(arg0.getActionCommand()=="5"){
                    if(!start){
                        s1.delete(0, s1.length());
                    }
                    start = true;
                    tf.setText(s1.append("5").toString());
                }
                if(arg0.getActionCommand()=="6"){
                    if(!start){
                        s1.delete(0, s1.length());
                    }
                    start = true;
                    tf.setText(s1.append("6").toString());
                }
                if(arg0.getActionCommand()=="7"){
                    if(!start){
                        s1.delete(0, s1.length());
                    }
                    start = true;
                    tf.setText(s1.append("7").toString());
                }
                if(arg0.getActionCommand()=="8"){
                    if(!start){
                        s1.delete(0, s1.length());
                    }
                    start = true;
                    tf.setText(s1.append("8").toString());
                }
                if(arg0.getActionCommand()=="9"){
                    if(!start){
                        s1.delete(0, s1.length());
                    }
                    start = true;
                    tf.setText(s1.append("9").toString());
                }
                //输入小数点
                if(arg0.getActionCommand()=="."){
                    if(!start){
                        s1.delete(0, s1.length());
                    }
                    start=true;
                    if(s1.toString().equals(new String()))
                        tf.setText(s1.append("0.").toString());
                    else if(s1.length()==1&&s1.charAt(0)=='-')
                        tf.setText(s1.append("0.").toString());
                    else
                        tf.setText(s1.append(".").toString());
                }
                //输入负号
                if(arg0.getActionCommand()=="+/-"){
                    if(!start){
                        s1.delete(0, s1.length());
                    }
                    start = true;
                    if(s1.toString().equals(new String()))
                        tf.setText(s1.append('-').toString());
                }
                //退格Backspace
                if(arg0.getActionCommand()=="Backspace"){
                    start = true;
                    if(s1.length()!=0){
                        //删除最后输入的一位
                        s1.deleteCharAt(s1.length()-1);
                        tf.setText(s1.toString());
                    }
                }
                //归零CE
                if(arg0.getActionCommand()=="CE"){
                    //清空所有,start标记设为true
                    start = true;
                    s1.delete(0, s1.length());
                    s2.delete(0, s2.length());
                    tf.setText(s1.toString());
                }
                //清除C
                if(arg0.getActionCommand()=="C"){
                    //清空当前输入,即s1清零
                    start = true;
                    s1.delete(0, s1.length());
                    tf.setText(s1.toString());
                }
                //加号
                if(arg0.getActionCommand()=="+"){
                    start = true;
                    flag="+";
                    //s2接收s1的值
                    s2.append(String.valueOf(s1.toString()));
                    //s1清零,重新接收下一个数据
                    s1.delete(0, s1.length());
                    tf.setText(s1.toString());
                }
                //减号
                if(arg0.getActionCommand()=="-"){
                    start = true;
                    flag="-";
                    s2.append(String.valueOf(s1.toString()));
                    s1.delete(0, s1.length());
                    tf.setText(s1.toString());
                }
                //乘号
                if(arg0.getActionCommand()=="*"){
                    start = true;
                    flag="*";
                    s2.append(String.valueOf(s1.toString()));
                    s1.delete(0, s1.length());
                    tf.setText(s1.toString());
                }
                //除号
                if(arg0.getActionCommand()=="/"){
                    start = true;
                    flag="/";
                    s2.append(String.valueOf(s1.toString()));
                    s1.delete(0, s1.length());
                    tf.setText(s1.toString());
                }
                //开根号
                if(arg0.getActionCommand()=="sqrt"){
                    start =false;
                    double s=Double.parseDouble(s1.toString());
                    s1.delete(0, s1.length());
                tf.setText(s1.append(String.valueOf(Math.sqrt(s))).toString());
                }
                //求%
                if(arg0.getActionCommand()=="%"){
                    start =false;
                    double s=Double.parseDouble(s1.toString());
                    s1.delete(0, s1.length());
                    tf.setText(s1.append(String.valueOf(s/100)).toString());
                }
                //求1/x
                if(arg0.getActionCommand()=="1/x"&&!s1.toString().equals(new String())&&Double.parseDouble(s1.toString())!=0){
                    start =false;
                    double s=Double.parseDouble(s1.toString());
                    s1.delete(0, s1.length());
                    tf.setText(s1.append(String.valueOf(1/s)).toString());
                }
                //求结果
                if(arg0.getActionCommand()=="="&&s1.length()!=0&&s2.length()!=0){
                    //start标记为false
                    start =false;
                    //分别获取s1和s2的值
                    double s4=Double.parseDouble(s1.toString()); 
                    double s3=Double.parseDouble(s2.toString());
                    //清空s1和s2,便于开始下一次运算
                    s1.delete(0, s1.length());
                    s2.delete(0, s2.length());
                    //四则运算
                    if(flag=="+"){
                        tf.setText(s1.append(String.valueOf(s3+s4)).toString());
                    }
                    if(flag=="-"){
                        tf.setText(s1.append(String.valueOf(s3-s4)).toString());
                    }
                    if(flag=="*"){
                        tf.setText(s1.append(String.valueOf(s3*s4)).toString());
                    }
                    if(flag=="/"){
                        tf.setText(s1.append(String.valueOf(s3/s4)).toString());
                    }
                }       
 
            }
        };
        //添加按钮以及监听器
        JButton bks = new JButton("删除");
        bks.addActionListener(listen);
        JButton ce = new JButton("归零");
        ce.addActionListener(listen);
        JButton c = new JButton("清空");
        c.addActionListener(listen);
        p2.add(bks);
        p2.add(ce);
        p2.add(c);
        f.add(p2);
        JPanel p3 = new JPanel();
        p3.setLayout(new GridLayout(4,5));
        JButton b1 = new JButton("7");
        p3.add(b1);
        b1.addActionListener(listen);
        JButton b2 = new JButton("8");
        p3.add(b2);
        b2.addActionListener(listen);
        JButton b3 = new JButton("9");
        p3.add(b3);
        b3.addActionListener(listen);
        JButton b4 = new JButton("/");
        p3.add(b4);
        b4.addActionListener(listen);
        JButton b5 = new JButton("sqrt");
        p3.add(b5);
        b5.addActionListener(listen);
        JButton b6 = new JButton("4");
        p3.add(b6);
        b6.addActionListener(listen);
        JButton b7 = new JButton("5");
        p3.add(b7);
        b7.addActionListener(listen);
        JButton b8 = new JButton("6");
        p3.add(b8);
        b8.addActionListener(listen);
        JButton b9 = new JButton("*");
        p3.add(b9);
        b9.addActionListener(listen);
        JButton b10 = new JButton("%");
        p3.add(b10);
        b10.addActionListener(listen);
        JButton b11 = new JButton("1");
        p3.add(b11);
        b11.addActionListener(listen);
        JButton b12 = new JButton("2");
        p3.add(b12);
        b12.addActionListener(listen);
        JButton b13 = new JButton("3");
        p3.add(b13);
        b13.addActionListener(listen);
        JButton b14 = new JButton("-");
        p3.add(b14);
        b14.addActionListener(listen);
        JButton b15 = new JButton("1/x");
        p3.add(b15);
        b15.addActionListener(listen);
        JButton b16 = new JButton("0");
        p3.add(b16);
        b16.addActionListener(listen);
        JButton b17 = new JButton("+/-");
        p3.add(b17);
        b17.addActionListener(listen);
        JButton b18 = new JButton(".");
        p3.add(b18);
        b18.addActionListener(listen);
        JButton b19 = new JButton("+");
        p3.add(b19);
        b19.addActionListener(listen);
        JButton b20 = new JButton("=");
        p3.add(b20);
        b20.addActionListener(listen);
        f.add(p3,BorderLayout.SOUTH);
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.pack();
        f.setVisible(true);
    }
 
    public static void main(String args[]){
        //调用方法,实现计算器
        new Calculate().init();
    }
 

}

Over!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值