设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算、
设计的计算器应用程序可以完成家法、减法、乘法、除法和取余运算。
以下是效果展示图:
详细代码:
package 计算器;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class 计算器 {
String number1; //第一个参与运算的数字 变量 string是数据类型 整个是定义属性
String number2; //第二个参与运算的数字
String operate; //数字的运算符
String number=""; //文本框当中显示的内容
double result; //两个数字的结果,这个结果会存到文本框当中
JFrame jf; //计算机界面的窗体
JTextField jtf; //文本域输入框
JButton[]jbs; //存放16个按钮组件的数组
private JButton clear; //清空按钮组件
public 计算器 () {
jf = new JFrame("计算器");// 新建窗体组件叫jf
jtf = new JTextField(15);//设置文本域组件
jbs = new JButton[16];//初始化数组
clear = new JButton("清空"); //设置“清空”按钮
String str = "123+456-789*0.=/";
for (int i = 0;i <jbs.length;i++) { //利用for循环,依次把数字写到文本处
jbs[i] = new JButton(str.charAt(i) + "");
//在for循环当中调用每一个按钮的addActionListener方法
jbs[i].addActionListener(new ButClick()); //添加了事件监听机制,将我们创建的ButClick对象以参数的形式传入,这样就给每一个按钮添加了事件监听器
}
init(); //在计算器构造方法当中调用init方法,也就是说在创建对象的时候,他会自动的调用init方法,从而将组件添加到相应的位置
jf.setSize(500,400); //窗口界面的大小
jf.setLocation(600,300);
jf.setVisible(true);//调用jf的setVisible方法,使它显示在桌面上 可见
}
public void init(){
//BorderLayout layout=new BorderLayout(); //创建BorderLayout布局(方位布局是上下左右中)
jf.setLayout(new BorderLayout()); //将frame容器设为Borderlayout 方位布局
JPanel panel1=new JPanel(); //创建一个JPanle1容器
JPanel panel2=new JPanel(); //创建一个JPanle2容器
panel1.setLayout(new FlowLayout()); //将panel1容器设为FlowLayout 流布局
panel1.add(jtf);//添加文本域
panel1.add(clear);//添加清空按钮
panel2.setLayout(new GridLayout(4,4)); //将panel2容器设为GridLayout 并且是4行4列的表格布局
for (int i = 0;i <jbs.length;i++) { //使用for循环,将数字和符号添加到panel2容器中
panel2.add(jbs[i]); //循环添加每一个按钮对象 通过下标位置来获取每一个按钮对象
}
//panel1.setLayout(new BorderLayout()); //将panel容器设为Borderlayout 布局
jf.add(panel1,BorderLayout.NORTH); //将panel1添加在窗体的最上方
jf.add(panel2,BorderLayout.CENTER); //将panel添加在窗体的最中间
}
//内部类的方式实现监听器
class ButClick implements ActionListener { //用ButClick类实现 ActionListener的接口 implen实现
public void actionPerformed(ActionEvent e) {
//并且在ButClink类当中实现ActionListenerjiekou当中的ActionPerformed的方法,在ActionPerformed的方法实现具体的运算逻辑,
//来实现计算业务逻辑
//获取按钮所对应的值,也就是我们按下的按钮所对应的标签值
//获取标签值:调取ActionEvent对象的GetSource方法来获取相对应的主键 主键就是按钮
String text = ((JButton)e.getSource()).getText(); //需要进行强制类型转换,把主键转换成JButton;调用JButton中getText方法,来获取上面对应的标签值,并且赋值给Sreing text变量
//判断是符号还是数字
if(text.equals ("=")){ //equals是比较相等
if(operate.equals("+")){
//number1和number2都是string类型,需要进行字符串数字类型的转换
result = Double.parseDouble(number1) + Double.parseDouble(number2);
jtf.setText(result+""); //setText只能传入字符串类型的数字,将double类型的result变成字符串类型的数字,拼接一个空字符串
}else if (operate.equals("-")){
result = Double.parseDouble(number1) - Double.parseDouble(number2);
jtf.setText(result+"");
}else if (operate.equals("*")) {
result = Double.parseDouble(number1) * Double.parseDouble(number2);
jtf.setText(result + "");
}else if (operate.equals("/")) {
result = Double.parseDouble(number1) / Double.parseDouble(number2);
jtf.setText(result + "");
}
number = ""; //相当于清空按钮,使文本域恢复
}else if(text.equals("+")){
operate = "+"; //首先将operate赋值为“+”
number = number + text;
jtf.setText(number);
}else if(text.equals("-")){
operate = "-";
number = number + text;
jtf.setText(number);
}else if(text.equals("*")){
operate = "*";
number = number + text;
jtf.setText(number);
}else if(text.equals("/")){
operate = "/";
number = number + text;
jtf.setText(number);
}else{
//将text获取到的数字赋值给number1还是number2,需要做一个判断
if(number1 == null){
number1 = text;
}else{
number2 = text;
}
number = number+text; //显示到文本域当中 字符串拼接
jtf.setText(number);//调用jtf.setText来对文本域内容进行设置,将number传入
}
}
}
public static void main(String[] args){
计算器 j = new 计算器(); //在main方法中创建计算器对象 实例化
}
}