




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.text.DecimalFormat;import j
2、avax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;public class Calculator extends JFrame private JTextF
3、ield tf;private JPanel panel1, panel2, panel3, panel4;/组件private JMenuBar myBar;private JMenu menu1;private JMenuItem editItem1, editItem2;private boolean IfResult = true, flag = false;private String oper = "="private double result = 0;private Num numActionListener;private DecimalFormat df
4、; /格式化十进制数StringBuffer memory=new StringBuffer(20);/M系列 动态存放字符串public Calculator()super("科学计算器");/设置标题栏 df = new DecimalFormat("#.#");/保留四位小数this.setLayout(new BorderLayout(10, 5); /总体布局panel1 = new JPanel(new GridLayout(1, 3, 10, 10);/网格布局管理器panel2 = new JPanel(new GridLayout(5,
5、 6, 5, 5);/5行6列panel3 = new JPanel(new GridLayout(5, 1, 5, 5);panel4 = new JPanel(new BorderLayout(5, 5);/* * 菜单栏 */myBar = new JMenuBar();menu1 = new JMenu("查看");menu1.setFont(new Font("宋体", Font.PLAIN, 12);editItem1 = new JMenuItem("帮助(F)",(int)'F');editItem2
6、= new JMenuItem("开发者信息(M)",(int)'M');editItem1.setFont(new Font("宋体",Font.PLAIN,12);editItem2.setFont(new Font("宋体",Font.PLAIN,12);editItem1.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)JOptionPane.showMessageDialog(null,"
7、1.CE :清除文本框 2.BackSpace :回删刚输入数字n " + "3.C :删除当前计算 4.MC :清除缓冲区n " + "5.MR :恢复缓冲区的数到文本框 6.MS :将文本框的数存入缓冲区n" + "7.M+ :将文本框值与缓冲区的数相加但不显示结果 8. 1/x :将文本框中的数据为它的倒数n" + "9.sqrt :将文本框中的内容求平方根 10.+/- :负数符号n" + "11.n! :n的阶乘 12.log :求对数n"+ "13.:角度弧度转化
8、 14.sin/cos/tan :三角函数" ); ); editItem2.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) JOptionPane.showMessageDialog(null,"作者:五班第09小组 李兴上 李辉 苏上超(组长) n " + "本计算器仅供交流使用,如有错误,敬请谅解。n本计算器参考了部分资料。n"););menu1.add(editItem1);menu1.add(editItem2);/菜单
9、myBar.add(menu1);/顶层菜单this.setJMenuBar(myBar);numActionListener = new Num();/实现数字监听 class Key extends JPanel implements KeyListener public void keyPressed(KeyEvent e) public void keyTyped(KeyEvent e) char x=e.getKeyChar(); if(x>='0'&&x<='9') if(IfResult)tf.setText("
10、;");IfResult = false; tf.setText(tf.getText().trim() + Character.toString(x);if(tf.getText().equals("0")tf.setText("0");IfResult = true;flag = true; if (x='+' | x='-' | x='*' | x='/' | x='=') if(flag) IfResult = false; if(IfResult) ope
11、r = Character.toString(x); else getResult(Double.parseDouble(tf.getText(); oper = Character.toString(x); IfResult = true; public void keyReleased(KeyEvent e) /* * 文本域,即为计算器的屏幕显示区域 */tf = new JTextField();tf.setEditable(false);/文本区域不可编辑tf.setBackground(Color.white);/文本区域的背景色tf.setHorizontalAlignment(
12、JTextField.RIGHT);/文字右对齐tf.setText("0");tf.setBorder(BorderFactory.createLineBorder(Color.black);/边框Key sk=new Key(); /键盘监听tf.addKeyListener(sk);init();/对计算器进行初始化/* * 初始化操作 * 添加按钮 */private void init()addButton(panel1, "Backspace", new Clear(), Color.black);addButton(panel1, &quo
13、t;CE", new Clear(), Color.black);addButton(panel1, "C", new Clear(), Color.black);addButton(panel2, "1/x", new Signs(), Color.black);addButton(panel2, "log", new Signs(), Color.black);addButton(panel2, "7", numActionListener, Color.blue);addButton(panel2,
14、 "8", numActionListener, Color.blue);addButton(panel2, "9", numActionListener, Color.blue);addButton(panel2, "÷", new Signs(), Color.black);addButton(panel2, "n!", new Signs(), Color.black);addButton(panel2, "sqrt", new Signs(), Color.black);add
15、Button(panel2, "4", numActionListener, Color.blue);addButton(panel2, "5", numActionListener, Color.blue);addButton(panel2, "6", numActionListener, Color.blue);addButton(panel2, "×", new Signs(), Color.black);addButton(panel2, "sin", new Signs(),
16、 Color.black);addButton(panel2, "x2", new Signs(), Color.black);addButton(panel2, "1", numActionListener, Color.blue);addButton(panel2, "2", numActionListener, Color.blue);addButton(panel2, "3", numActionListener, Color.blue);addButton(panel2, "-", n
17、ew Signs(), Color.black);addButton(panel2, "cos", new Signs(), Color.black);addButton(panel2, "x3", new Signs(), Color.black); addButton(panel2, "-/+", new Clear(), Color.black);addButton(panel2, "0", numActionListener, Color.blue);addButton(panel2, ".&qu
18、ot;, new Dot(), Color.black);addButton(panel2, "+", new Signs(), Color.black);addButton(panel2, "tan", new Signs(), Color.black);addButton(panel2, "%", new Signs(), Color.black);addButton(panel2, "", numActionListener, Color.black);addButton(panel2, "e&qu
19、ot;, numActionListener, Color.black);addButton(panel2, "", new Signs(), Color.black);addButton(panel2, "=", new Signs(), Color.black); JButton bm = new JButton("计算器");bm.setBorder(BorderFactory.createLoweredBevelBorder(); /凹陷bm.setEnabled(false);/按钮不可操作bm.setPreferredSi
20、ze(new Dimension(20, 20);/宽 高panel3.add(bm);/加入按钮addButton(panel3, "MC", new Signs(), Color.black);addButton(panel3, "MR", new Signs(), Color.black);addButton(panel3, "MS", new Signs(), Color.black);addButton(panel3, "M+", new Signs(), Color.black);panel4.add(
21、panel1, BorderLayout.NORTH);panel4.add(panel2, BorderLayout.CENTER);this.add(tf, BorderLayout.NORTH);this.add(panel3, BorderLayout.WEST);this.add(panel4); /*总窗口*/pack(); /正好容纳放置的所有组件this.setResizable(true);/窗口可改变大小this.setLocation(300, 200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/关闭 /*
22、* 统一设置按钮的的使用方式 * param panel * param name * param action * param color */private void addButton(JPanel panel, String name, ActionListener action, Color color)JButton bt = new JButton(name);panel.add(bt);/在面板上增加按钮bt.setForeground(color);/设置前景(字体)颜色bt.addActionListener(action);/增加监听事件/* * 计算器的基础操作(+ -
23、 × ÷) * param x */private void getResult (double x)if(oper.equals( "+")result += x;else if(oper.equals("-")result -= x;else if(oper.equals ( "×")result *= x;else if(oper.equals( "÷")result /= x;else if(oper.equals("=")result = x;t
24、f.setText(df.format(result); /文本显示/* * 运算符号的事件监听 */ class Signs implements ActionListenerpublic void actionPerformed(ActionEvent e) /* * 用ActionEvent对象的getActionCommand()方法 * 取得与引发事件对象相关的字符串 */String str = e.getActionCommand();/* sqrt求平方根 */if(str.equals("sqrt") /“equals()”比较字符串中所包含的内容是否相同
25、double i = Double.parseDouble(tf.getText(); /字符转化为doubleif(i>=0)/* * String.valueOf() 转换为字符串 * df.format() 按要求保留四位小数 * Math.sqrt() 求算数平方根 */tf.setText(String.valueOf(df.format(Math.sqrt(i);elsetf.setText("负数不能开平方根");/* log求常用对数 */else if(str.equals("log")double i = Double.pars
26、eDouble(tf.getText();if(i>0)tf.setText(String.valueOf(df.format(Math.log(i);elsetf.setText("负数不能求对数");/*M系列*/ else if(str.equals("MC") String temp = " " memory.replace(0, memory.length(), temp); /replace方法, 第一个参数是要修改的字符串,第二个参数是要替换的字符串,第三个参数是替换成什么样的字符串. else if(str.eq
27、uals("MR") tf.setText(memory.toString(); else if(str.equals("MS") String temp = tf.getText().trim(); memory.replace(0, memory.length(), temp); else if(str.equals("M+") String temp1 = tf.getText().trim(); Double num = Double.parseDouble(temp1); String temp2 = memory.toSt
28、ring(); num += Double.parseDouble(temp2); temp1 = String.valueOf(num); /整形 memory.replace(0, memory.length(), temp1); /* %求百分比 */else if(str.equals("%")tf.setText(df.format(Double.parseDouble(tf.getText() / 100);/* 1/x求倒数 */else if(str.equals("1/x")if(Double.parseDouble(tf.getTex
29、t() = 0)tf.setText("除数不能为零");elsetf.setText(df.format(1 / Double.parseDouble(tf.getText();/* sin求正弦函数 */else if(str.equals("sin")double i = Double.parseDouble(tf.getText();tf.setText(String.valueOf(df.format(Math.sin(i);/* cos求余弦函数 */else if(str.equals("cos")double i =
30、Double.parseDouble(tf.getText();tf.setText(String.valueOf(df.format(Math.cos(i);/* tan求正切函数 */else if(str.equals("tan")double i = Double.parseDouble(tf.getText();tf.setText(String.valueOf(df.format(Math.tan(i);/* n!求阶乘 */else if(str.equals("n!")double i = Double.parseDouble(tf.ge
31、tText();if(i%2=0)|(i%2=1)/判断为整数放进行阶乘操作int j = (int)i;/强制类型转换int result=1;for(int k=1;k<=j;k+)result *= k;tf.setText(String.valueOf(result);elsetf.setText("无法进行阶乘");/* x2求平方 */else if(str.equals("x2")double i = Double.parseDouble(tf.getText();tf.setText(String.valueOf(df.format
32、(i*i);/* x3求立方 */else if(str.equals("x3")double i = Double.parseDouble(tf.getText();tf.setText(String.valueOf(df.format(i*i*i);/* 角度转换 */* * 将角度值转换成弧度值,方便三角函数的计算 */else if(str.equals("")double i = Double.parseDouble(tf.getText();tf.setText(String.valueOf(i/180*Math.PI);elseif(fla
33、g)IfResult = false;if(IfResult)oper = str;else getResult(Double.parseDouble(tf.getText();oper = str;IfResult = true;/* * 清除按钮的事件监听 */class Clear implements ActionListenerpublic void actionPerformed(ActionEvent e) /* * 用ActionEvent对象的getActionCommand()方法 * 取得与引发事件对象相关的字符串 */String str = e.getActionCommand();if(str = "C")tf.setText("0");IfResult = true;result = 0;else if(str = "-/+")double i = 0 - Double.parseDouble(tf.getText().trim();tf.setText(df.format(i);else if(str = "Backspace")if(Double.parseDoubl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 不锈钢表面除蜡施工方案
- 2025北京东城高二(上)期末生物(教师版)
- 突发事件处置方案
- 地下室不锈钢水池施工方案
- 紫叶矮樱嫁接繁育技术关键要点全面深入探讨与阐述
- 四川省眉山市洪雅县洪雅县2024-2025学年九年级上学期期末考试物理试题(原卷版+解析版)
- 室外弱电整修施工方案
- 绿色金融与可持续投资的策略
- 工业碳减排与绿色制造的策略及实施路径
- 思维可视化视域下高中英语课堂读后续写教学策略研究
- 河南2025年河南职业技术学院招聘30人笔试历年参考题库附带答案详解
- IATF16949:2024标准质量手册
- 一把手讲安全课件:提升全员安全意识
- 幼儿园食谱播报
- 复古简约中国古典名著导读三国演义培训PPT模板
- 不锈钢排烟风管施工实施方案
- PMC部门工作流程图
- IPC-4101刚性多层印制线路板的基材规范
- Oracle-EBS模块讲解
- 浆砌条石砖项施工方案
- 带你领略渊海子平
评论
0/150
提交评论