用JAVA来实现四则运算的计算器。。。
实现这个计算器的功能对我来说也算是个挑战,因为之前从来都没有自己独立的去实现某种东西,也没有怎么样的去做好一个题目,但是这回学JAVA,我希望我是认真的。
最开始实现这个的思路是在flowLayout面板里面一个一个按键的添加监听类,然后通过JFTxetField文本框类来获取输入,最后实现功能。但是这种做法让我觉得很慢,很愚蠢,所以在经过了自己的思考之后是想着在实现按键的时候添加监听类,通过循环的方式来实现对监听类的初始化。
在百度了类似做法的人的代码的时候,我也照搬照套的实现了自己的计算器的功能。
- 实现这个功能要有序,通过构建一个calcular类来实现计算器的面板和功能。
- 实现面板的时候,要明确的分析清楚面板里面应该有什么样的东西,就比如说获取输入的文本框,getText方法是获得数字,setTxet方法是显示数字,这两个方法在获得数字和运算符号的时候要有目的性的去使用。
文本框是利用BorderLayout布局放置在整个框架的正北方,然后添加一个Panel,Panel用的是GridLayout(网块化的布局方式)来实现按钮,最后在Panel里面利用for循环来添加按钮,再在按钮里面添加监听器,最后再去实现功能 - 实现功能的时候,要想着,实现这个计算器程序需要什么,输入1(并存储),运算符号(输入但是不显示),输入2(运算之后输出结果);这就是3个变量需要声明
- 在实现整个功能的时候,有一个地方要注意,就是最开始监测按数字按钮的时候,你按了,然后最开始文本框是有一个初始值0的,你按了只后就会去不掉0
这里是看了别人的代码实现的功能
就是在监听类的实现里面,你要判断鼠标点击按钮,你先点击了,文本框就获得值,但是如果你继续点击的话呢?这个实现利用了boolean变量和if/else if语句来实现的,先点击了,文本框的默认是boolean类型是错误的,只能获得你点击了的数,然后把boolean类型改为正确,再去实现数字的累积的功能
描述说完了,按钮写的挺多的,但是并没有完全去实现完`
calculator类
import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class calculator extends JFrame implements ActionListener{
private String num1; //储存第一个要输入的数字
private String num2; //储存可能输出的第二个数字
private String option; //储存计算器中的运算符号之类的
private LayoutManager gridbaglayout; //panel中的布局类型
private JTextField jtf=new JTextField("0"); //初始化一个文本框来进行以后的操作
private boolean flag=false; //定义一个boolean类型的量来判断以后的文本框
public calculator (){ //在calculator这个类里面构造函数来实现面板功能
JFrame jf=new JFrame("计算器");
jf.setSize(300,300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel jp=new JPanel(); //初始化一个面板
jp.setLayout(new GridLayout(5,4));
String dcKey[] = { "CE","C", "←", "÷", "7", "8", "9","×", "4", "5", "6", "-",
"1","2", "3", "+", "NULL", "0","null", "="};
for(int i=0;i<dcKey.length;i++){
JButton b=new JButton(dcKey[i]);
jp.add(b);
b.addActionListener(this);
}
jf.add(jtf,BorderLayout.NORTH); //在BorderLayout布局中把文本框放在北方
jf.add(jp, BorderLayout.CENTER); //在Borderlayout布局中把面板jp 居中
jf.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String get1=e.getActionCommand();
System.out.print(get1);
if("0123456789".indexOf(get1)!=-1){ //判断这一串数字中是否有一个能在indexof这个函数里面找到 没找到就返回-1 所以这个就是在这个字符串里面找到了
if(flag){
String input=jtf.getText();
jtf.setText(input+get1);
}else{
jtf.setText(get1);
; flag=true;
}
}
if("+-×÷".indexOf(get1)!=-1){
option=jtf.getText(); //num1是用作来储存文本框里面被点击了的运算符号 option储存已经点击完了的数字
num1=get1;
flag=false;
}
if("=".equals(get1)){ //执行计算的操作
num2=jtf.getText(); //第二次点击的数字
double d1=Double.parseDouble(option );
double d2=Double.parseDouble(num2);
if("+".equals(num1)){
d1=d1+d2;
}else if("×".equals(num1)){
d1=d1*d2;
}else if("÷".equals(num1)){
d1=d1/d2;
}else if("-".equals(num1)){
d1=d1-d2;
}
num2=d1+"";
jtf.setText(num2);
flag=false;
}
}
}`
功能检测
public static void main(String[] args) {
new calculator();
}
}