Java实现计算器
package GUI._8_2_;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
//计算机窗口 可计算
//注释带有”+++“的 是比Calculator多的代码
public class Calculator2 extends JFrame{//继承JFrame面板 直接初始化了窗口 用this调用内部方法 +++
String number ="";//文本框里的值 +++
String number1 ;//第一个操作数 +++
String number2 ;//第二个操作数 +++
double result;//计算结果 +++
String operator;//操作符 +++
JTextField jtf;// 文本域输入框
JButton[] btn;// 存放16个组件的数组
JButton clear;// '清空'按钮
public Calculator2() {// 初始化窗口组件
jtf = new JTextField();// 初始化文本框
clear = new JButton("清空");// 初始化清空按钮
clear.addActionListener(new ActionListener() {//匿名监听器 +++
public void actionPerformed(ActionEvent e) {
number="";
jtf.setText(number);
}
});
// 设置窗体图标
Image im = new ImageIcon("heart.gif").getImage();
this.setIconImage(im);
btn = new JButton[16];
String str = "789+456-123*0.=/";
for (int i = 0; i < btn.length; i++) {
btn[i] = new JButton(str.charAt(i) + "");
btn[i].addActionListener(new BtnCkick());//给按钮添加监听器+++
}
init();
setFont();
}
private void setFont() {//设置字体大小
Font f= new Font("微软雅黑",1,20);
for (int i = 0; i < btn.length; i++) {
btn[i].setFont(f);
}
clear.setFont(f);//清空 字体
Font font= new Font("微软雅黑",2,10);//文本域字体
jtf.setFont(font);
}
public void init() {// 添加组件,设置窗体布局
this.setLayout(new BorderLayout());// 窗体调为边界布局
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
jp1.setLayout(new FlowLayout());// 面板1 流体布局
jtf.setPreferredSize(new Dimension(240,36));//设置文本域的预设大小
jp1.add(jtf);
jp1.add(clear);
jp2.setLayout(new GridLayout(4, 4));// 面板2 4*4网格布局
for (int i = 0; i < btn.length; i++) {
jp2.add(btn[i]);
}
this.add(jp1, BorderLayout.NORTH);// 面板1 的 流体布局添加到面板的北边
this.add(jp2, BorderLayout.CENTER);// 面板2 的 网格布局添加到面板的中间
showMe();
}
public void showMe() {// 显示窗体
this.setTitle("计算机V2");//设置窗口名
this.setSize(400, 350);// 设置窗体大小
this.setLocation(500, 200);// 设置出现位置
this.setVisible(true);// 设置窗体可见
this.setResizable(false);// 设置窗口大小不可变
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置默认的关闭操作
}
//将监听器定义成内部类
class BtnCkick implements ActionListener{
public void actionPerformed(ActionEvent e) {
String text = ((JButton)e.getSource()).getText();//获取按钮的文本信息
if(text.equals("=")){
number2=jtf.getText();
if(operator.equals("+")){
result=Double.parseDouble(number1)+Double.parseDouble(number2);
jtf.setText(result+"");
}else if(operator.equals("-")){
result=Double.parseDouble(number1)-Double.parseDouble(number2);
jtf.setText(result+"");
}else if(operator.equals("*")){
result=Double.parseDouble(number1)*Double.parseDouble(number2);
jtf.setText(result+"");
}else if(operator.equals("/")){
result=Double.parseDouble(number1)/Double.parseDouble(number2);
jtf.setText(result+"");
}
}else if(text.equals("+")){
number1=jtf.getText();
operator="+";
number="";
}else if(text.equals("-")){
number1=jtf.getText();
operator="-";
number="";
}else if(text.equals("*")){
number1=jtf.getText();
operator="*";
number="";
}else if(text.equals("/")){
number1=jtf.getText();
operator="/";
number="";
}else{
number=number + text;
jtf.setText(number);
}
}
}
public static void main(String[] args) {
new Calculator2();//main方法
}
}
效果