Java用awt编写计算器(只有加减乘除)
结果演示:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class CalFrame extends Frame {
public TextField txt;//文字框文本
public boolean flag=false;//判断是否切换文字框内容
public int numflag=0;//判断是否为第一次输入和计算
public String operator="";//保存计算符号
public double num1;//保存前一次运算结果或第一次输入的数据
public double num2;//保存刚输入的数据
public CalFrame(String title) {
super(title);
init();//引入名字并启动计算器
}
private void init() {
this.setBounds(100, 100, 160, 220);//计算机位置和大小
txt=new TextField();
this.add(txt, BorderLayout.NORTH);//利用麻将布局将文本框位置放于最上方
Panel panel=new Panel();
GridLayout gl=new GridLayout(4,4,1,1);//分割面板
panel.setLayout(gl);
this.add(panel);//设置frame布局为GridLayout
Button[] btn= {new Button("7"),new Button("8"),new Button("9"),new Button("+"),new Button("4"),new Button("5"),new Button("6"),new Button("-"),new Button("1"),new Button("2"),new Button("3"),new Button("*"),new Button("0"),new Button("."),new Button("="),new Button("/")};
for(int i=0;i<btn.length;i++) {
panel.add(btn[i]);//将个按钮加入面板
}
for(int i=0;i<btn.length;i++) {//判断是数字还是符号并运用相应方法
if(i!=3&&i!=7&&i!=11&&i!=15&&i!=14) {
btn[i].addMouseListener(new NumberButtonListener(this));
}else {
btn[i].addMouseListener(new OperatorButtonListener(this));
}
}
this.setVisible(true);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
CalFrame.this.dispose();
} //关闭计算器
});
}
}
import java.awt.Button;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class NumberButtonListener extends MouseAdapter {
private CalFrame frame;
public NumberButtonListener(CalFrame frame) {
this.frame = frame;
}
@Override
public void mouseClicked(MouseEvent e) {
Button btn=(Button)e.getSource();
String num=btn.getLabel();
if(frame.numflag==0) {//判断是否为第一次输入
frame.numflag=1;
}
if(!frame.flag) {
frame.txt.setText(num);
frame.flag=true;//便于文字框内容的切换
}
else {
frame.txt.setText(frame.txt.getText()+num);//便于二位数等数的输入
}
}
}
import java.awt.Button;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class OperatorButtonListener extends MouseAdapter {
private CalFrame frame;
public OperatorButtonListener(CalFrame frame) {
this.frame = frame;
}
@Override
public void mouseClicked(MouseEvent e) {
frame.flag=false;//使下一次输入数字时文字框内容切换
if(frame.numflag==1) {//判断是否为第一次计算
frame.numflag=2;
String num1Str=frame.txt.getText();
frame.num1=Double.parseDouble(num1Str);
Button btn=(Button)e.getSource();
frame.operator=btn.getLabel();
}else if(frame.numflag==2) {
String num2Str=frame.txt.getText();
frame.num2=Double.parseDouble(num2Str);
if("+".equals(frame.operator)) {
frame.num1=frame.num1+frame.num2;
}else if("-".equals(frame.operator)) {
frame.num1=frame.num1-frame.num2;
}else if("*".equals(frame.operator)) {
frame.num1=frame.num1*frame.num2;
}else if("/".equals(frame.operator)) {
frame.num1=frame.num1/frame.num2;
}//判断符号并进行对应的运算
frame.num2=0;
Button btn=(Button)e.getSource();
frame.operator=btn.getLabel();
if("=".equals(frame.operator)) {//判断最后的符号是否为“=”
frame.txt.setText(frame.num1+"");//输出结果
frame.numflag=0;
frame.flag=false;//数据清零
}
}
}
}
public class Counter {
public static void main(String[] args) {
new CalFrame("计算器");//启动计算器
}
}