java学习之计算器基本实现
来源:互联网 发布:我欲封天时装进阶数据 编辑:程序博客网 时间:2024/05/22 01:55
package calculator;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class calculator extends JFrame{//文本框 private JTextField jtd=new JTextField("0");//清除按钮 private JButton reset = new JButton("CE");//退格按钮 private JButton back = new JButton("←");//计算器按钮编号 private final String[] str={ "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", ".", "0", "=", "+" }; //构造函数 private void init() { //关闭方式 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //文本框显示方式jtd.setHorizontalAlignment(JTextField.RIGHT);Container c=getContentPane();JPanel jpl=new JPanel();JPanel jpl2=new JPanel();MyActionListener ma=new MyActionListener();c.add(jtd,BorderLayout.NORTH);c.add(jpl,BorderLayout.CENTER);c.add(jpl2,BorderLayout.SOUTH);jpl2.setLayout(new FlowLayout());jpl.setLayout(new GridLayout(4,4));jpl2.add(back);jpl2.add(reset);buttonSet(str,ma,jpl);back.addActionListener(ma);reset.addActionListener(ma); }//按钮添加方法public void buttonSet(String[] b, ActionListener obj,JPanel jpl){JButton[] buttons=new JButton[b.length];for(int i=0;i<b.length;i++){buttons[i]=new JButton(b[i]);buttons[i].addActionListener(obj);jpl.add(buttons[i]);}}public calculator(){super("Calculator"); init();}class MyActionListener implements ActionListener{ private boolean isFirstDigit = true; // 计算的中间结果。 private double resultNum = 0.0; // 当前运算的运算符 private String operator = "="; // 操作是否合法 private boolean operateValidFlag = true;@Overridepublic void actionPerformed(ActionEvent e) { String label = e.getActionCommand(); Object target = e.getSource(); //两种方式都可以 /* if (label.equals("CE")) handleReset(); else if(label.equals("←")) handleBackspace(); */ if (target == reset) handleReset(); else if(target==back) handleBackspace(); else if ("0123456789.".indexOf(label)>=0) handleNumber(label); else handleOperator(label); }private void handleReset(){// TODO Auto-generated method stub jtd.setText("0"); isFirstDigit = true; operator = "=";} /** * 处理Backspace键被按下的事件 */ private void handleBackspace() { String text = jtd.getText(); int i = text.length(); if (i > 0) { // 退格,将文本最后一个字符去掉 text = text.substring(0, i - 1); if (text.length() == 0) { // 如果文本没有了内容,则初始化计算器的各种值 jtd.setText("0"); isFirstDigit = true; operator = "="; } else { // 显示新的文本 jtd.setText(text); } } } private void handleNumber(String key) { if (isFirstDigit) { // 输入的第一个数字 jtd.setText(key); } else if ((key.equals(".")) && (jtd.getText().indexOf(".") < 0)) { // 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面 jtd.setText(jtd.getText() + "."); } else if (!key.equals(".")) { // 如果输入的不是小数点,则将数字附在结果文本框的后面 jtd.setText(jtd.getText() + key); } // 以后输入的肯定不是第一个数字了 isFirstDigit = false; } /** * 处理运算符键被按下的事件 * * @param key */ private void handleOperator(String key) { if (operator.equals("/")) { // 除法运算 // 如果当前结果文本框中的值等于0 if (getNumberFromText() == 0.0) { // 操作不合法 operateValidFlag = false; jtd.setText("除数不能为零"); } else { resultNum /= getNumberFromText(); } } else if (operator.equals("+")) { // 加法运算 resultNum += getNumberFromText(); } else if (operator.equals("-")) { // 减法运算 resultNum -= getNumberFromText(); } else if (operator.equals("*")) { // 乘法运算 resultNum *= getNumberFromText(); } else if (operator.equals("=")) { // 赋值运算 resultNum = getNumberFromText(); } if (operateValidFlag) { // 双精度浮点数的运算 long t1; double t2; t1 = (long) resultNum; t2 = resultNum - t1; if (t2 == 0) { jtd.setText(String.valueOf(t1)); } else { jtd.setText(String.valueOf(resultNum)); } } // 运算符等于用户按的按钮 operator = key; isFirstDigit = true; operateValidFlag = true; } /** * 从结果文本框中获取数字 * * @return */ private double getNumberFromText() { double result = 0; try { result = Double.valueOf(jtd.getText()).doubleValue(); } catch (NumberFormatException e) { e.printStackTrace(); } return result; } }public static void main(String[] args){calculator ca=new calculator();ca.setTitle("calculator");ca.setSize(400, 400);ca.setVisible(true);ca.pack();}}
_________________________________________________________________________________________________
计算器的界面搭建是自己完成的,但是内部的具体算法参考了别人的代码,自己的完成度基本就是ctrl+C和Ctrl+V,仅仅修改了适合自己的,没有独立思考。看来自己还需要继续努力。。不行啊。。。
嘎嘎嘎
致谢:
(1).点击打开链接
(2)点击打开链接
0 0
- java学习之计算器基本实现
- Java实现栈之计算器
- Java学习笔记之计算器
- QT学习 之 计算器的实现
- JAVA学习笔记---简易计算器之图形界面
- java实现能计算10道基本运算的计算器
- java学习笔记之实现基本数据结构——栈
- Flex之计算器实现
- IOS之计算器实现
- 学习cs之计算器
- java实现计算器
- java实现的计算器
- JAVA实现简易计算器
- Java实现表达式计算器
- Java实现简单计算器
- java实现简易计算器
- JAVA计算器算法实现
- JAVA 实现预产期计算器
- {学习笔记}[算法第四版]第一章
- ViewController之间传值
- Far Relative’s Problem(贪心算法)
- TelephonyManager类详解
- java中的sleep()和wait()的区别
- java学习之计算器基本实现
- HDU5743 多校2.9
- 怎样将PDF文件转换成jpg图片的方法
- 各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT
- svn使用
- Java 多线程之线程监控
- JXL操作Excel文件 (未测试)
- cc2640 IAR 打印log
- android学习笔记 SwipeRefreshLayout 的使用