用java编写一个计算器
importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassty{publicstaticvoidmain(String[]args){newPP();}}classPPextendsJFrameimplementsAct..
·
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class tyty{
public static void main(String[] args) {
new PP();
}
}
class PP extends JFrame implements ActionListener {
private StringBuilder sBuilder = new StringBuilder(); // 利用StringBuilder类来显示,以及区分两个操作数
JTextArea text = new JTextArea();
double a, b;
Double sum;
int i;
public PP() {
JMenuBar menubar = new JMenuBar();// 创建菜单条
JMenu menu1 = new JMenu("查看(V)");// 创建和设置菜单名
JMenu menu2 = new JMenu("编辑(E)");// 创建和设置菜单名
JMenu menu3 = new JMenu("帮助(H)");// 创建和设置菜单名
menubar.add(menu1);// 将菜单加入到菜单条中
menubar.add(menu2);
menubar.add(menu3);
this.setJMenuBar(menubar);// 将设置好的菜单条放在窗口中
JPanel mb1, mb2, mb3, mb4;// 添加四个面板
JButton b1[] = new JButton[3];
JButton b2[] = new JButton[4];
JButton b3[] = new JButton[20];
text = new JTextArea();
mb4 = new JPanel();
mb2 = new JPanel();
String[] a2 = { "MC", "MR", "MS", "M+" };
mb1 = new JPanel();
String[] a1 = { "退格", "CE", "C" };
mb3 = new JPanel();
String[] a3 = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".",
"+", "=" };
for (int i = 0; i < b1.length; i++)
b1[i] = new JButton(a1[i]);
for (int j = 0; j < b2.length; j++)
b2[j] = new JButton(a2[j]);
for (int k = 0; k < b3.length; k++)
b3[k] = new JButton(a3[k]);
for (int i = 0; i < 3; i++)
b1[i].setForeground(Color.red);
for (int m = 0; m < 4; m++)
b2[m].setForeground(Color.red);
b3[3].setForeground(Color.red);
b3[8].setForeground(Color.red);
b3[13].setForeground(Color.red);
b3[18].setForeground(Color.red);
b3[19].setForeground(Color.red);
GridLayout g = new GridLayout(1, 3, 8, 8);
mb1.setLayout(g);
for (int z = 0; z < b1.length; z++)
mb1.add(b1[z]);
GridLayout v = new GridLayout(4, 1, 8, 8);
mb2.setLayout(v);
for (int x = 0; x < b2.length; x++)
mb2.add(b2[x]);
GridLayout b = new GridLayout(4, 5, 8, 8);
mb3.setLayout(b);
for (int c = 0; c < b3.length; c++)
mb3.add(b3[c]);
BorderLayout n = new BorderLayout();
mb4.setLayout(n);
mb4.add(mb1, BorderLayout.NORTH);
mb4.add(mb2, BorderLayout.WEST);
mb4.add(mb3, BorderLayout.CENTER);
this.add(text, BorderLayout.NORTH);
this.add(mb4, BorderLayout.CENTER);
this.setSize(200, 200);
this.setTitle("汤预的计算器");
this.setLocation(100, 100);
for (int k = 0; k < b3.length; k++) { // 为每一个事件(按钮)添加监视器
b3[k].addActionListener(this);
}
for (int l = 0; l < b1.length; l++) { // 为每一个事件(按钮)添加监视器
b1[l].addActionListener(this);
}
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e) // 事件处理
{
String lab = e.getActionCommand(); // 得到当前的按钮字符,后面进行匹配
if (lab.equals("0")) // 处理按钮 0~9
{
sBuilder.append("0"); // 利用StringBuilder类的对象调用方法,将数据存起来
text.setText(sBuilder.toString()); // 显示之前所有输入的数据
} else if (lab.equals("1")) {
sBuilder.append("1"); // 利用StringBuilder类的对象调用方法,将数据存起来
text.setText(sBuilder.toString()); // 显示之前所有输入的数据
} else if (lab.equals("2")) {
sBuilder.append("2"); // 利用StringBuilder类的对象调用方法,将数据存起来
text.setText(sBuilder.toString()); // 显示之前所有输入的数据
} else if (lab.equals("3")) {
sBuilder.append("3"); // 利用StringBuilder类的对象调用方法,将数据存起来
text.setText(sBuilder.toString()); // 显示之前所有输入的数据
} else if (lab.equals("4")) {
sBuilder.append("4");
text.setText(sBuilder.toString());
} else if (lab.equals("5")) {
sBuilder.append("5");
text.setText(sBuilder.toString());
} else if (lab.equals("6")) {
sBuilder.append("6");
text.setText(sBuilder.toString());
} else if (lab.equals("7")) {
sBuilder.append("7");
text.setText(sBuilder.toString());
} else if (lab.equals("8")) {
sBuilder.append("8");
text.setText(sBuilder.toString());
} else if (lab.equals("9")) {
sBuilder.append("9"); // 利用StringBuilder类的对象调用方法,将数据存起来
text.setText(sBuilder.toString());
} // 显示之前所有输入的数据
else if (lab.equals("CE")) // 处理"CE"按钮事件 即清除当前的输入的数据
{
sBuilder.deleteCharAt(sBuilder.length() - 1); // StringBuilder的实例化对象调用方法下标减1即可
text.setText(sBuilder.toString());
} else if (lab.equals("C")) // 处理"C"按钮事件 即清除之前的输入所有的数据
{
sBuilder = new StringBuilder(); // 重新创建即可清除之前的输入所有的数据
text.setText(sBuilder.toString());
} else if (lab.equals(".")) // 处理按钮 "." 事件
{
sBuilder.append("."); // 利用StringBuilder类的对象调用方法,将数据存起来
text.setText(sBuilder.toString()); // 显示之前输入的数据
}
else if (lab.equals("+")) // 处理+"按钮乘法
{
a = Double.parseDouble(sBuilder.toString()); // 将 运算符 之前的数据 作为第一个操作数 a
i = 0;
sBuilder = new StringBuilder(); // 将数组清空来存储第二个操作数 b
text.setText("+");
} else if (lab.equals("-")) // 处理"—"按钮乘法
{
a = Double.parseDouble(sBuilder.toString()); // 将前面的输入的数 作为第一个操作数a
i = 1; // 标记运算类型 即"÷"之前的数据即将作为因数
sBuilder = new StringBuilder(); // 将数组清空来存储第二个操作数 b
text.setText("-");
} else if (lab.equals("*")) // 处理"x"按钮乘法
{
a = Double.parseDouble(sBuilder.toString()); // 将前面的输入的数 作为第一个操作数a
i = 2; // 标记运算类型 即"÷"之前的数据即将作为因数
sBuilder = new StringBuilder(); // 将数组清空来存储第二个操作数 b
text.setText("*");
} else if (lab.equals("/")) // 处理"÷"按钮事件
{
i = 3; // 标记运算类型 即"÷"之前的数据即将作为被除数
a = Double.parseDouble(sBuilder.toString()); // 将除法的输入的数 作为第一个操作数a
sBuilder = new StringBuilder(); // 将数组清空来存储第二个操作数 b
text.setText("/");
}
else if (lab.equals("=")) {
b = Double.parseDouble(sBuilder.toString()); // 一遇到"=",我们就能得到第二个操作数b
if (i == 0) // 加法 a+b
{
sum = a + b;
text.setText(sum.toString()); // 输出第二个操作数已经输入的数据
sBuilder = new StringBuilder(); // 清空数据,为后面的操作数留空间
sBuilder.append(sum);
} else if (i == 1) // 加法 a-b
{
sum = a - b;
text.setText(sum.toString());
sBuilder = new StringBuilder(); // 清空数据,为后面的操作数留空间
sBuilder.append(sum);
} else if (i == 2) // 乘法 a*b
{
sum = a * b;
text.setText(sum.toString());
sBuilder = new StringBuilder();
sBuilder.append(sum);
} else if (i == 3) // 除法 a÷b
{
sum = a / b;
text.setText(sum.toString());
sBuilder = new StringBuilder();
sBuilder.append(sum);
}
}
}
}
点击阅读全文
更多推荐
所有评论(0)