📄 cal.java
字号:
package cal;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.*;
public class Cal {
//新建计算器的框架和面版
private Frame f;
private Panel pNorth, pCenter, pSouth, pWest, pEast;
//定义计算器的按钮名称
private String nameCenter[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
private String nameWest[] = { "+", "-", "*", "/" };
private String nameEast[] = { "CE", "C", ".", "=" };
private String nameSouth[] = { "0" };
private Button btnCenter[] = new Button[nameCenter.length];
private Button btnEast[] = new Button[nameEast.length];
private Button btnWest[] = new Button[nameWest.length];
private Button btnSouth[] = new Button[nameSouth.length];
//创建显示部分
TextField tf = new TextField("0", 20);
//创建计算器计算过程中用到的数据结构
CalBean cb = new CalBean();
/**
*
* 构造器
*
*/
public Cal() {
//新建框架
f = new Frame("my cal");
//新建面板
pNorth = new Panel();
pCenter = new Panel();
pSouth = new Panel();
pWest = new Panel();
pEast = new Panel();
//框架用BorderLayout
// 布局BorderLayout中的North
pNorth.setSize(500, 30);
pNorth.add(tf);
// pNorth.setBackground(Color.red);
pNorth.setLayout(new FlowLayout(FlowLayout.CENTER));
// 布局BorderLayout中的South
pSouth.setSize(500, 30);
pSouth.setLayout(new GridLayout(1, 1, 4, 4));
for (int i = 0; i < nameSouth.length; i++) {
btnSouth[i] = new Button(nameSouth[i]);
pSouth.add(btnSouth[i]);
btnSouth[i].addActionListener(new ZeroListener());
}
pSouth.setVisible(true);
// 布局BorderLayout中的East
pEast.setSize(200, 250);
pEast.setLayout(new GridLayout(4, 1, 4, 4));
for (int i = 0; i < nameEast.length; i++) {
btnEast[i] = new Button(nameEast[i]);
pEast.add(btnEast[i]);
btnEast[i].addActionListener(new EastListener());
btnEast[i].setSize(150, 30);
}
pEast.setVisible(true);
// 布局BorderLayout中的West
pWest.setSize(200, 250);
pWest.setLayout(new GridLayout(4, 1, 2, 2));
for (int i = 0; i < nameWest.length; i++) {
btnWest[i] = new Button(nameWest[i]);
pWest.add(btnWest[i]);
btnWest[i].addActionListener(new OperaListener());
btnWest[i].setSize(150, 30);
}
pWest.setVisible(true);
// 布局BorderLayout中的Center
pCenter.setSize(100, 100);
pCenter.setLayout(new GridLayout(3, 3, 2, 2));
for (int i = 0; i < nameCenter.length; i++) {
btnCenter[i] = new Button(nameCenter[i]);
pCenter.add(btnCenter[i]);
btnCenter[i].addActionListener(new NumberListener());
}
pCenter.setVisible(true);
// 把各部分面板加到框架
f.setLayout(new BorderLayout(5, 5));
f.add(pNorth, BorderLayout.NORTH);
f.add(pCenter, BorderLayout.CENTER);
f.add(pEast, BorderLayout.EAST);
f.add(pWest, BorderLayout.WEST);
f.add(pSouth, BorderLayout.SOUTH);
f.setSize(500, 300);
f.pack();
f.setVisible(true);
//添加关闭按钮
f.addWindowListener(new CloseWindow());
}
/**
* 创建计算器
*
*
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Cal c = new Cal();
}
/**
*
* 关于计算器框架的监听器
* @author Administrator
*
*/
class CloseWindow implements WindowListener {
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub
}
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
System.exit(0);
}
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
}
/***
*
* 数字键的监听器
* @author Administrator
*
*/
class NumberListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
//获得命令
String commond = e.getActionCommand();
//如果刚计算完
if (cb.isClafin()&&(cb.isCla()==false)) {
tf.setText(null);
cb.setClafin(false);
cb.setOper(0);
cb.setTemp1("000");
cb.setTemp2("000");
cb.setCla(false);
cb.setHaspoint(false);
cb.setPoint(false);
}
//初始化后
if ((cb.isCla())&&(cb.isClafin()==false)) {
//如果之前输入的是运算符号
tf.setText(null);
}
//连加的情况
if (cb.isCla()&&cb.isClafin()) {
//连加
tf.setText(null);
cb.setClafin(false);
}
String s=tf.getText();
if (s.equals("0")) {
tf.setText(null);
}
//添加显示结果
setTFText(tf, commond);
cb.setCla(false);
cb.setPoint(false);
}
}
/**
*
* 获得显示器的内容
* @param t
* @return
*/
private String getTFText(TextField t) {
return t.getText();
}
/**
*
* 设置TextField
* @param t
* @param a
*/
private void setTFText(TextField t, String a) {
String c = t.getText();
if (c.equals("0")) {
c = a;
} else {
c = c + a;
}
t.setText(c);
}
/**
* 浮点数变成字符串
* @param d
* @return
*/
private String changeFloat(Float d) {
return Float.toString(d);
}
/**
* 计算
* @param a
* @param b
* @return
*/
private String caluaterWithOperate(String a,String b){
float aa=Float.parseFloat(a);
float bb=Float.parseFloat(b);
float cc=0.0f;
if (a.equals("0")==false) {
switch (cb.getOper()) {
case 1:cc = aa + bb;break;
case 2:cc = aa - bb;break;
case 3:cc = aa * bb;break;
case 4:cc = aa / bb;break;
default:break;
}
}
return Float.toString(cc);
}
/**
*
* 响应C CE .和=按钮的监听器
* @author Administrator
*
*/
class EastListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String commond = e.getActionCommand();
//------------------ C ------------------
if (commond.equals("C")) {
cb.setTemp1("000");
cb.setTemp2("000");
tf.setText("0");
cb.setCla(false);
cb.setClafin(false);
cb.setHaspoint(false);
cb.setOper(0);
cb.setPoint(false);
}
//-------------------- CE -----------------------
if (commond.equals("CE")) {
tf.setText("0");
}
//----------------------- . ------------------------
if (commond.equals(".")) {
if (cb.isCla()==true) {//z之前操作是运算符号
//oper
tf.setText("0.");
cb.setPoint(true);
cb.setHaspoint(true);
cb.setCla(false);
}else
if (cb.isClafin()==true) {//刚计算完
//=
tf.setText("0.");
cb.setHaspoint(true);
cb.setPoint(true);
cb.setClafin(false);
cb.setTemp1("000");
cb.setTemp2("000");
cb.setCla(false);
cb.setOper(0);
}else if (cb.isHaspoint()==false) {//已经有小数点
//all
if (tf.getText().equals("0")) {//屏幕初始化
tf.setText("0.");
}else{//加小数点
tf.setText((tf.getText()+"."));
}
cb.setHaspoint(true);
cb.setPoint(true);
}
}
//---------------------- = -------------------------
if (commond.equals("=")) {
if ((cb.getTemp1().equals("000")==false)&&(cb.isClafin()==false)){
//第一次按等号
cb.setTemp2(tf.getText());
String res=caluaterWithOperate(cb.getTemp1(),tf.getText());
cb.setTemp1(res);
tf.setText(res);
cb.setClafin(true);
cb.setHaspoint(false);
cb.setPoint(false);
cb.setCla(false);
}else if((cb.getTemp1().equals("000")==false)&&(cb.isClafin()==true)&&(cb.isCla()==false)){
//狂按等号
String res=caluaterWithOperate(cb.getTemp1(),cb.getTemp2());
cb.setTemp1(res);
tf.setText(res);
cb.setClafin(true);
cb.setHaspoint(false);
cb.setPoint(false);
cb.setCla(false);
}else if(cb.isClafin()&&cb.isCla()){
//按操作顺序 1 + 2 + = 的情况
}
}
}
}
/***
*
* 响应+ - * /按钮的监听器
* @author Administrator
*
*/
class OperaListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
//获得命令
String commond = e.getActionCommand();
if (cb.isClafin()==false) {//不是刚运算完
if ((cb.getTemp1().equals("000") == false)
&& (cb.getTemp2().equals("000"))) {//temp1有东西
String s = tf.getText();
cb.setTemp2(s);//把数加到temp2
String res = caluaterWithOperate(cb.getTemp1(), cb
.getTemp2());
tf.setText(res);
cb.setTemp1(res);
cb.setClafin(true);
cb.setCla(true);
cb.setPoint(false);
cb.setHaspoint(false);
setOpetator(commond);
} else if ((cb.getTemp1().equals("000") == false)
&& (cb.getTemp2().equals("000") == false)) {
//有两个数
String res = caluaterWithOperate(cb.getTemp1(), tf
.getText());
tf.setText(res);
cb.setTemp1(res);
cb.setClafin(true);
cb.setCla(true);
cb.setPoint(false);
cb.setHaspoint(false);
setOpetator(commond);
} else if ((cb.getTemp1().equals("000"))
&& (cb.getTemp2().equals("000"))) {
//什么数也没有
String s = tf.getText();
cb.setTemp1(s);
setOpetator(commond);
cb.setCla(true);
cb.setClafin(false);
cb.setPoint(false);
cb.setHaspoint(false);
}
}else{
setOpetator(commond);
cb.setCla(true);
}
}
/**
* 操作符号转数字
* @param s
*/
private void setOpetator(String s){
if (s.equals("+")) {
cb.setOper(1);
}
if (s.equals("-")) {
cb.setOper(2);
}
if (s.equals("*")) {
cb.setOper(3);
}
if (s.equals("/")) {
cb.setOper(4);
}
}
}
/***
*
* 0
* @author Administrator
*
*/
class ZeroListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if (tf.getText().equals("0")) {
//屏幕是0什么也不作
}else if(cb.isClafin()){//刚运算完,屏幕是结果
cb.setClafin(false);
tf.setText("0");
}else if(cb.isCla()){//刚按完操作符号
cb.setCla(false);
tf.setText("0");
}else{//其他情况
tf.setText((tf.getText()+"0"));
cb.setPoint(false);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -