作业要求
编写Java GUI程序,实现一个简单计算器。要求如下:
(1)设计的界面如下图所示:窗体的标题栏显示“模拟计算器—江海大”,1个文本框用于显示输入字符和计算结果;20个按钮控件作为字符输入按键或者功能按键。
(2)计算功能:实现加、减、乘、除等双目运算,开平方、百分数等单目运算;
(3)辅助功能:按钮“C”清空文本框;按钮“←”退格,删除文本框中最右边的一个字符。
代码
为了锻炼大家阅读代码的能力,本篇博文不包含代码的详细注释,只说明几点:
1、Java 不像 C / C++ 那样具有手动释放内存的函数。Java 由垃圾收集器(Garbage Collecter)来清除不再被变量引用的内存对象。
2、BigDecimal 对象一旦建立,不能修改。如果要修改某个 BigDecimal 变量的值,只能再次进行 new 操作。这个变量会指向内存中新建的新的 BigDecimal 的值,原有的 BigDecimal 成为内存碎片,往后将被垃圾收集器自动回收(GC 一般不会立即回收不再被引用的对象)。
3、通过 BigDecimal 进行除法时,如果除不尽,会产生异常。本程序处理这个异常的方法是设定保留的小数位数(默认为 64 位)并重新计算。
4、BigDecimal 类的成员变量中的指定四舍五入方式的常量已经弃用,指定四舍五入方式请通过 java.math.RoundingMode 中的常量指定。
5、由于时间关系,我没有增加处理键盘响应的代码,因此这个简易计算器无法通过键盘输入。这部分就暂时先鸽了,等我十分空闲时会考虑补充。
6、代码横向长度较长,建议复制到 IDE 中,将 IDE 的窗口最大化后再进行查看。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.math.MathContext;
import java.math.RoundingMode;
import java.math.BigDecimal;
import java.math.BigInteger;
public class Calc {
public static void main(String[] args) {
Main m = new Main(); }
}
class Global {
public static JTextField text = new JTextField("0");
public static final int scale = 64;
}
class Main {
JFrame frame = new JFrame("模拟计算器——江海大");
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
JPanel panel = new JPanel(new GridLayout(5, 4));
Inputter inputter = new Inputter();
String name[] = {
"C", "÷", "×", "←","7", "8", "9", "-", "4", "5", "6", "+", "1", "2", "3", "√", "%", "0", ".", "=" };
JButton button[] = new JButton[name.length];
Main() {
Global.text.setEditable(false);
frame.setLayout(new BorderLayout()); frame.setBounds(screen.width / 2 - 320, screen.height / 2 - 180, 640, 360);
frame.setResizable(false)