用JAVA做个简易的计算器,入门水平就好,不要太复杂 实现功能:加减乘除,清除键,部分清除键,开平方,小数点,等号,百分比
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; 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 Calculation extends JFrame implements ActionListener{ private JTextField txfResult;//显示操作结果的文本框 JTextField txfM;//显示记忆的索引值的文本框 Double dM=0d;//存储数据 public Calculation() { super("swing 计算器实例"); /*设置用于显示的文本框*/ txfResult =new JTextField("0",30);//初始文本显示0 最大列数30 txfResult.setBackground(Color.WHITE); txfResult.setHorizontalAlignment(JTextField.RIGHT);//数字在文本框中靠右显示 txfResult.setEditable(false);//文本框不可编辑 即为readOnly只读属性 JPanel ResultTextPanel=new JPanel();//放操作结果文本框的面板 ResultTextPanel.add(txfResult); /*设置用于控制数字的键与显示记忆索引值的文本框*/ txfM=new JTextField(2);//最长2列 JButton b1=new JButton("Backspace");//退格键 JButton b2=new JButton("CE");//重置键 JButton b3=new JButton("C");//清0键 JPanel ControlPanel=new JPanel(); ControlPanel.setLayout(new GridLayout(1, 4, 2, 2));//1行4列 水平间距2 垂直间距2 ControlPanel.add(txfM); ControlPanel.add(b1); ControlPanel.add(b2); ControlPanel.add(b3); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); /*数字和运算符键*/ String dcKey[]= {"MC","7","8","9","/","sqrt","MR","4","5","6","*","%","MS","1","2","3","-","1/x" ,"M+","0","+/-",".","+","="}; JPanel dcKeyPanel =new JPanel();//数字和运算符的面板 dcKeyPanel.setLayout(new GridLayout(4, 6,2,2)); //一个 循环放好所有数字和运算符组件 for(int i=0;i<24;i++) { JButton b=new JButton(dcKey[i]); dcKeyPanel.add(b); b.addActionListener(this); } Container ct=this.getContentPane();//窗体内容面板对象 ct.setLayout(new BorderLayout()); ct.add(ResultTextPanel,BorderLayout.NORTH); ct.add(ControlPanel,BorderLayout.CENTER); ct.add(dcKeyPanel,BorderLayout.SOUTH); pack(); setVisible(true); setResizable(false);//禁止最大化 setLocationRelativeTo(null);//居中显示 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new Calculation(); } //////////////////////////////////////////////////////数字键和功能键的实现///////////////////////////////////////////////////////// private boolean newDigital=true;//类内全局boolean变量 用于表示是否是输入数的标志 private String operation="";//表示运算符的字符串 private double d1;//二元运算前操数 private double d2;//二元运算后操作数 private int optionValue;//区别加减乘除运算符的变量 /*监听方法*/ @Override public void actionPerformed(ActionEvent e) { String s=(e.getActionCommand());//返回与此动作相关的命令字符串 就是button上显示的字 String str=txfResult.getText(); /*后退键*/ if(s.equals("Backspace")) { if(str.equals("0")||str.equals("")) {//已经是清0状态下 不可再清0了 return; } String s1=txfResult.getText(); txfResult.setText(s1.substring(0, s1.length()-1));//截掉最后一个数字 } /*重置键*/ if(s.equals("CE")) { txfResult.setText("0"); newDigital=true;//是否是新输入的数的标志设置为true } /*清0键*/ if(s.equals("C")) { txfResult.setText("0"); optionValue=0;//表示运算符的变量设置为0 newDigital=true;//表示是否新输入的数的标志设置为true } /*数字键*/ if(s.length()==1&&s.charAt(0)>='0'&&s.charAt(0)<='9') { if(!newDigital) { txfResult.setText(str+s);//不是新输入的数 }else { txfResult.setText(s); newDigital=false;//表示是否新输入的数的标志设置为false } return; } /*小数点*/ if(s.equals(".")) { if(txfResult.getText().indexOf(".")==-1) {//若之前尚不存在小数点 /*判断数字是否0打头*/ if(txfResult.getText().trim().startsWith("0")) {//强大的API txfResult.setText("0."); newDigital=false; }else { txfResult.setText(str+".");//str事件刚开始就得到的txfResult.getText() } } return; } /* 表示数字正负符号+/- */ if(s.equals("+/-")) { double d=Double.parseDouble(str.trim());//获取输入的数字 txfResult.setText(String.valueOf(-d));//取得获取输入数字的相反数 return; } //////////////////////////////////////////////////////加减乘除运算的实现///////////////////////////////////////////////////////// if(s.equals("+")) { d1=Double.parseDouble(txfResult.getText());//立刻获取前操作数的值 txfResult.setText(""); optionValue=1;//设置运算符标志 } if(s.equals("-")) { d1=Double.parseDouble(txfResult.getText()); optionValue=2; } if(s.equals("*")) { d1=Double.parseDouble(txfResult.getText()); optionValue=3; } if(s.equals("/")) { d1=Double.parseDouble(txfResult.getText()); optionValue=4; } if(s.equals("=")) { d2=Double.parseDouble(txfResult.getText());//获取后操作数的值 /*根据运算符标志的不同值确定计算结果*/ switch(optionValue) { case 1: txfResult.setText(String.valueOf(d1+d2)); break; case 2: txfResult.setText(String.valueOf(d1-d2)); break; case 3: txfResult.setText(String.valueOf(d1*d2)); break; case 4: if(d2!=0) { txfResult.setText(String.valueOf(d1/d2)); }else { txfResult.setText("除数不能为0"); return; } break; } operation="";//运算结束 清空运算符 } ////////////////////////////////求平方根 倒数 百分比运算///////////////////////////////// if(s.equals("sqrt")) { double d=Double.parseDouble(txfResult.getText().trim());//获取操作数的值 if(d>0) { txfResult.setText(String.valueOf(Math.sqrt(d)));//计算该值的平方根 }else { txfResult.setText("负数不能计算平方根"); } }else if(s.equals("1/x")) { double d=Double.parseDouble(txfResult.getText().trim());//计算倒数 if(str.equals("0")) { txfResult.setText("除数不能为0"); }else { txfResult.setText(String.valueOf(1/d)); } }else if(s.equals("%")) { txfResult.setText((String.valueOf(Double.parseDouble(str)/100))); } ///////////////////////////////////////////实现数据的记忆功能/////////////////////////////////// if(s.equals("MC")) {//清空存储数据 txfResult.setText(""); dM=0d; newDigital=true; } if(s.equals("MR")) { if(txfM.getText().trim()!="") { txfResult.setText(""+dM);//显示存储数字当前值 } } if(s.equals("MS")) { dM=Double.parseDouble(txfResult.getText().trim()); txfM.setText("M");//存储区显示M } if(s.equals("M+")) { dM=dM+Double.parseDouble(txfResult.getText().trim());//将显示的数字与已经存储的数据相加 即更新存储数据 } } }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。