目录
计算器功能
一个简单的计算器,应该具有图形化界面,各种Button,一个结果显示屏,支持加减乘除,N次方,N次方根,求sin,cos,tan以及对应的反sin,cos,tan,log。
各种难点
难点1:图形化界面
这里我选用的是JAVA.Swing。
1,先用JPane和JFramel构建我们的窗口,JPanel是一个通用的轻量级容器,先定义一个JPanel panel,然后在main方法里面用panel = new JPanel;创造窗口。用setBackground设置颜色。
JPanel panel;
panel = new JPanel;
panel.setBackground(Color.BLUE);
2,用JTextField输出计算结果,JTextField
是一个轻量级组件,允许编辑单行文本。
-
JTextField
的水平对齐可以设置为左对齐,前导对齐,居中,右对齐或尾对齐。 如果字段文本的所需大小小于分配给它的大小,则右/尾对齐很有用。 这由setHorizontalAlignment
和getHorizontalAlignment
方法确定。 默认值是前导对齐。 - JTextField
-
public JTextField():构造一个新的TextField 。 创建默认模型,初始字符串为null ,列数设置为0。
- public JTextField(String text):构造一个使用指定文本初始化的新
TextField
。 将创建默认模型,列数为0。 - public JTextField(int columns):构造具有指定列数的新空
TextField
。 将创建默认模型,并将初始字符串设置为null
。 - public JTextField(String text, int columns):构造一个使用指定文本和列初始化的新
TextField
。 创建默认模型。 - public JTextField(Document doc, String text, int columns):构造一个新的
JTextField
,它使用给定的文本存储模型和给定的列数。 这是其他构造函数通过其提供的构造函数。 如果文档是null
,则创建默认模型。
-
- setHorizontalAlignment
-
设置文本的水平对齐方式。 有效密钥是:
JTextField.LEFT
JTextField.CENTER
JTextField.RIGHT
JTextField.LEADING
JTextField.TRAILING
invalidate
和repaint
,并PropertyChange
事件(“horizontalAlignment”)。
-
- setFont
-
public void setFont(Font f):设置当前字体。 这将删除缓存的行高和列宽,以便反映新字体。 设置字体后调用revalidate。
-
JTextField display;
display = new JTextField(20);
display.setEditable(false);
display.setText(displayText);
3,用JButton创建计算器的各种按键
然后添加事情监听器,这样用户按下按键就能给我们一个值用于判断。用panel.add(JButton);添加按钮到容器中。
难点2:各种计算公式
result = Math.pow(operand2, 2);
result = Math.pow(operand2, 3);
result = Math.sqrt(operand2);
result = Math.sin(operand2*Math.PI/180);
result = Math.cos(operand2*Math.PI/180);
result = Math.tan(operand2*Math.PI/180);
result = Math.log10(operand2);
result = Math.log(operand2);
result = Math.asin(operand2);
result = Math.acos(operand2);
result = Math.atan(operand2);
result = operand2-2*operand2;
result = Math.cbrt(operand2);
sin,cos,tan这里不光要用Math公式,还要把输入的数值从弧度制转化为角度制再带入计算。
难点3:连续运算
要实现连续运算,就需要记录下前2次运算的结果,然后依次运算,每次运算都保留运算结果用于下次运算。先定义2个变量operand1,operand2用于保存用户输入的数值,再定义一个operator用于保存用户输入的运算符。然后增加判断条件,如果用户按下数字,再屏幕上显示数字,如果用户按下运算符+-*/,则记录屏幕上已经有的数字为operand1,然后准备记录下一个数字operand2,所以要清空屏幕。用户输入第二个数字按下=,记录屏幕上的数字为operand2,然后运算,输出结果。operator一开始定义好了之后是null,只有用户按过运算符才会改变,所以判断operator是不是null就可以判断是否是连续运算。
// 判断是否连续运算
else if (operator != null){
displayText = Double.toString(computeResult());
display.setText(displayText);
operand1 = Double.parseDouble(displayText);
shouldAppendDigitToNumber = false;
operator=String.va