java计算器代码

java计算器代码

package a;

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

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

public class Mycalulator extends JFrame implements ActionListener{
	 /**
	 *
	 */
	private static final long serialVersionUID = 1L;
	private final String[]KEYS={"7","8","9","+","4","5","6","-","1","2","3","*","0",".","="};
	    private final String[]Command={"删除","归0"};
	    private JButton[] keys=new JButton[KEYS.length];
	    private JButton[] coms=new JButton[Command.length];
	    private JTextField text=new JTextField("0");
	    private boolean Firstdigit=true;//是否第一次输入
	    private double result=0.0;//结果
	    private String operator = "=";//默认操作为"="
	    private boolean operateValidFlag = true;//操作是否合法
	    public Mycalulator() {
	        // TODO Auto-generated constructor stub
	        init();
	        this.setTitle("标准计算器 中山大学南方学院曾春淮");
	        this.setLocationRelativeTo(null);
	        this.setVisible(true);
	        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	        //this.setSize(width, height)
	        this.pack();
	    }
	    private void init() {
	        // TODO Auto-generated method stub
	        text.setHorizontalAlignment(JTextField.RIGHT);//文本右对齐
	        text.setEditable(false);//不可编辑
	        text.setBackground(Color.RED);//背景白色
	        JPanel keyspanel=new JPanel();//装按键的画板
	        keyspanel.setLayout(new GridLayout(4,4,3,3));//布局为网格布局4行4列 水平竖直间距都为3像素
	        for(int i=0;i<keys.length;i++){//创建按钮
	            keys[i]=new JButton(KEYS[i]);
	            keyspanel.add(keys[i]);//在画板上添加按钮
	            keys[i].setForeground(Color.black);//按键前景色蓝色
	        }
	        //运算符按键前景色为红
	        keys[3].setForeground(Color.red);
	        keys[7].setForeground(Color.red);
	        keys[11].setForeground(Color.red);
	        keys[14].setForeground(Color.red);
	        JPanel comspanel=new JPanel();
	        comspanel.setLayout(new GridLayout(1,2,3,3));
	        for(int i=0;i<coms.length;i++){
	            coms[i]=new JButton(Command[i]);
	            comspanel.add(coms[i]);
	        }
	        JPanel panel1=new JPanel();
	        panel1.setLayout(new BorderLayout(3,3));// 画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素
	        panel1.add("North", comspanel);
	        panel1.add("Center", keyspanel);
	        JPanel top = new JPanel();  //装文本框的画板
	        top.setLayout(new BorderLayout()); //边界布局
	        top.add("Center", text);
	        getContentPane().setLayout(new BorderLayout(3,5));
	        getContentPane().add("North", top);  //北  放置top画板 里面是文本框
	        getContentPane().add("Center", panel1);  //中心  放置panel1画板 装的是数字按键和命令按键
	        for (int i = 0; i < KEYS.length; i++) {
	            keys[i].addActionListener(this);
	        }
	        for (int i = 0; i < Command.length; i++) {
	            coms[i].addActionListener(this);
	        }
	    }
	    @Override
	    public void actionPerformed(ActionEvent e) {
	        // TODO Auto-generated method stub
	        String label=e.getActionCommand();
	        if(label==Command[0]){
	            handledelete();
	        }
	        else if(label==Command[1]){
	            handleC();
	        }
	        else if("0123456789.".indexOf(label)>=0){
	            handlenumber(label);
	        }
	        else{
	            handleOperator(label);
	        }
	    }
	    private void handleOperator(String label) {
	        // TODO Auto-generated method stub
	        if(operator.equals("/")){
	            if(text.getText()=="0"){
	                text.setText("除数不能为0 中山大学南方学院曾春淮");
	                operateValidFlag=false;
	                handleC();
	            }
	            else{
	                result/=Double.valueOf(text.getText());
	            }
	        }
	        else if(operator.equals("*")){
	            result*=Double.valueOf(text.getText());
	        }
	        else if(operator.equals("+")){
	            result+=Double.valueOf(text.getText());
	        }
	        else if(operator.equals("-")){
	            result-=Double.valueOf(text.getText());
	        }
	        else if(operator.equals("=")){
	            result=Double.valueOf(text.getText());
	        }
	        if(operateValidFlag){
	            text.setText(String.valueOf(result));
	        }
	        operator=label;
	        Firstdigit = true;//按完运算符后 在输入数字为第一次输入
	        operateValidFlag=true;
	    }
	    private void handlenumber(String label) {
	        // TODO Auto-generated method stub
	        if(Firstdigit){
	            if(label.equals(".")){
	                text.setText(text.getText()+".");
	            }
	            else{
	            text.setText(label);
	            }
	        }
	        //按的是"."并且字符串里没"."
	        else if(label.equals(".")&&text.getText().indexOf(".")<0){
	            text.setText(text.getText()+".");
	        }
	        //按得是数字
	        else if(!label.equals(".")){
	            text.setText(text.getText()+label);
	        }
	        Firstdigit=false;//输过就不是第一次输入了
	    }
	    private void handleC() {
	        // TODO Auto-generated method stub
	        text.setText("0");
	        Firstdigit=true;
	        operator="=";
	    }
	    private void handledelete() {
	        // TODO Auto-generated method stub
	        if(text.getText().length()>1){
	            text.setText(text.getText().substring(0, text.getText().length()-1));
	        }
	        else if(text.getText().length()==1){
	            text.setText("0");
	        }
	    }
	    public static void main(String args[]) {
	        Mycalulator calculator1 = new Mycalulator();

//	        Mycalulator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    }

}

                

开发心得

按钮触发的数字显示在文本框中 并与 下一个事件按钮的相加或相减相乘相除 连接不上
使用 gettext ()
连接上去 并制作新的显示框 缺点是 不可以在文本框上连续输入 像 9+9 =
除法结构是最难的
因为分母不能为零 当下一步按零后 会出现出错
网上借鉴为 返回空白文本框
平方立方方法 单单是结果相乘会出错
可以用输入内容乘以输入内容实现 平方立方的方法

1、 个人总结
2、 else if("/".equals(mingling)){ // 判断语句 如果命令输入是除法“/”就执行以下的操作 以下都是同理

2文本框能输入 但不能退一 怎么退一找不到法子
文本框不是数字 借鉴后 只能才文本长度里面入手 文本内容减一实现操作
3 switch 选择语句比较简单 在老师的课本中有提及 但选择按钮的方法缺乏详细操作
可以上网借鉴模仿 实现的语句
4添加按钮事件比较容易 纯粹是设置位置就好 和Add 按钮 比较困难的是 计算的方法 监视器后 能实现和执行没有出错才是 核心步骤
没有 上面的核心步骤算法 制造出来的计算器只是一个空白文框
5平方立方事件 是比较难
无意中发现 只要是输入文本内容乘以输入文本内容或者应用math 类平方立方的使用 也可以实现 平方立方 但是前提必须是数字
6.很奇怪是啦 关于怎么实现开方立方 这个可讲知识了
这要引用到Math 类的 sqrt是开方 cbrt 是开立方 把输入的内容输入括号了 便实现了开方立方
7.颜色按钮是 引用color类 在指定的按钮后面setForeground(Color.orange) 便可实现颜色的使用啦
8关于实现sin tan cos 也是使用Math 类 但是 使用后就是弧度制吧
Math.PI 就是π这个意思
Sin30度 就是 math.sin【math.pi / 输入6】 就是度数了 是不是很简单啦
哈哈哈
9 log 这个函数就比较 难理解吧 网上有参考公式 可以
例如要10为底 就是log输入/log10 就实现了

10通过学习理解就觉得简单了
其实大多数方法都是在网上学习理解得来的 书本上教的有非常不错的地方 关于文件导入的方法就比较简略 所以要多方面学习才是 提升自己的方法 最重要的还是自己的动手能力和理解方法就好

白嫖了之后记得点赞转发一键三连支持一下 关注我 呗
此项目乃本人原创 转载请务必声明 侵犯本人创作权 违法必究

  • 25
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值