📄 tcalculator.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
class tcalculator extends Frame implements ActionListener {
/*以下代码定义面板中的单位*/
TextField result,mtext;
Panel panel1,panel2,panel3,panel4;
MenuBar menu;
Menu edit, view, help;
MenuItem copy, paste, tcal, scal, group, mhelp, about;
Button back,ce,c;
Button num[];
Button mc, mr, ms, madd,dot, aors, add, sub, mul,div, percent,sqrt, recip, equal,sure;
double memo,tran1,tran2,cp;
int sign=0;
boolean cpable;
Dialog dia;
Label l1,l2,l3;
/*以下构造函数*/
public tcalculator() {
super("计算器");
result = new TextField(15);//用来显示数字
result.setText("");
result.setEditable(true);
result.setBackground(new Color(255, 255, 255));
panel1 = new Panel();
add(panel1,BorderLayout.CENTER);
panel2 = new Panel();
panel3 = new Panel();
panel1.setLayout(new BorderLayout());
/*设计菜单栏*/
menu=new MenuBar();
/*设计编辑菜单*/
edit=new Menu("编辑(E)");
copy=new MenuItem(" 复制(C) Ctrl+C");
paste=new MenuItem(" 粘贴(V) Ctrl+V");
edit.add(copy);
edit.add(paste);
/*设计查看菜单*/
view=new Menu("查看(V)");
tcal=new MenuItem("●标准型(T)");
scal=new MenuItem(" 科学型(S)");
group=new MenuItem(" 数字分组(I)");
view.add(tcal);
view.add(scal);
view.addSeparator();
view.add(group);
/*设计帮助菜单*/
help=new Menu("帮助(H)");
mhelp=new MenuItem("帮助主题");
view.addSeparator();
about=new MenuItem("关于计算器");
help.add(mhelp);
help.add(about);
menu.add(edit);
menu.add(view);
menu.add(help);
setMenuBar(menu); //将菜单栏添加到窗体中
/*将文本框以及面板panel2添加到面板panel1中,panel1布局为方位布局*/
panel1.add(result, BorderLayout.CENTER);
panel1.add(panel2, BorderLayout.SOUTH);
panel2.setLayout(new BorderLayout());
mtext=new TextField(3);//用于显示内存运算的文本框
mtext.setEditable(false);//显示内存运算的文本框不可编辑
mtext.setBackground(new Color(217, 217, 217));
back=new Button("Backspace");
/*设计Backspace、CE、C按钮*/
ce=new Button("CE");
c=new Button("C");
/*将Backspace、CE、C按钮以及面板panel3、panel4添加到panel2,panel2的布局为方位布局*/
panel2.add(panel3, BorderLayout.NORTH);
panel3.setLayout(new FlowLayout(FlowLayout.RIGHT));
panel3.add(mtext);
panel3.add(back);
panel3.add(ce);
panel3.add(c);
panel4=new Panel();
panel2.add(panel4, BorderLayout.CENTER);
/*设计数字按钮、小数点按钮、'+/-'按钮*/
num=new Button[10];
for (int i = 0; i < num.length; i++) {
num[i] = new Button(Integer.toString(i));
num[i].setForeground(Color.blue);
}
dot= new Button(".");
dot.setForeground(Color.blue);
aors=new Button("+/-");
aors.setForeground(Color.blue);
/*设计加减乘除以及'='按钮*/
add=new Button("+");
add.setForeground(Color.red);
sub=new Button("-");
sub.setForeground(Color.red);
mul = new Button("*");
mul.setForeground(Color.red);
div = new Button("/");
div.setForeground(Color.red);
equal = new Button("=");
equal.setForeground(Color.red);
/*设计开方、百分数、倒数按钮*/
sqrt = new Button("sqrt");
sqrt.setForeground(Color.blue);
percent = new Button("%");
percent.setForeground(Color.blue);
dao = new Button("1/x");
dao.setForeground(Color.blue);
/*设计内存运算按钮*/
mc= new Button("MC");
mc.setForeground(Color.red);
mr=new Button("MR");
mr.setForeground(Color.red);
ms=new Button("MS");
ms.setForeground(Color.red);
madd= new Button("M+");
madd.setForeground(Color.red);
/*将有关运算的按钮添加到panel4中,panel4为网格布局*/
panel4.setLayout(new GridLayout(4, 6,3,3));
panel4.add(mc);
panel4.add(num[7]);
panel4.add(num[8]);
panel4.add(num[9]);
panel4.add(div);
panel4.add(sqrt);
panel4.add(mr);
panel4.add(num[4]);
panel4.add(num[5]);
panel4.add(num[6]);
panel4.add(mul);
panel4.add(percent);
panel4.add(ms);
panel4.add(num[1]);
panel4.add(num[2]);
panel4.add(num[3]);
panel4.add(sub);
panel4.add(dao);
panel4.add(madd);
panel4.add(num[0]);
panel4.add(aors);
panel4.add(dot);
panel4.add(add);
panel4.add(equal);
/*将功能按钮添加监听*/
back.addActionListener(this);
ce.addActionListener(this);
c.addActionListener(this);
for (int i = 0; i < num.length; i++){
num[i].addActionListener(this);
}
dot.addActionListener(this);
add.addActionListener(this);
sub.addActionListener(this);
mul.addActionListener(this);
div.addActionListener(this);
equal.addActionListener(this);
percent.addActionListener(this);
dao.addActionListener(this);
sqrt.addActionListener(this);
aors.addActionListener(this);
mc.addActionListener(this);
mr.addActionListener(this);
ms.addActionListener(this);
madd.addActionListener(this);
copy.addActionListener(this);
paste.addActionListener(this);
tcal.addActionListener(this);
scal.addActionListener(this);
about.addActionListener(this);
/*实现窗口的关闭*/
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {tcalculator.this.dispose(); }
}
);
}
/*事件处理*/
public void actionPerformed(ActionEvent e){
Object t=e.getSource();//获取事件来源
try {
/*实现退格功能*/
if (t==back) {
String s=result.getText();
result.setText("");
for (int i=0;i<s.length()-1;i++){
char a=s.charAt(i);
result.setText(result.getText()+a);
}
}
/*实现第二个数的清空*/
if (t==ce)
result.setText("");
/*实现所有清空*/
if (t==c) {
result.setText("");
tran1=0;
tran2=0;
}
/*实现数字的输入*/
for (int i=0;i<=9;i++)
if (t==num[i])
result.setText(result.getText()+i);
/*实现小数点的输入*/
if (t==dot) {
boolean isdot=false;
for (int i=0;i<result.getText().length();i++)
if (result.getText()==""||'.'== result.getText().charAt(i)) {
isdot=true;
break;
}
if (isdot==false)
result.setText(result.getText()+".");
}
/*实现'+/-'的输入*/
if (t==aors) {
String s=result.getText();
if (s.charAt(0)=='-') {
result.setText("");
for (int i=1;i<s.length();i++){
char a=s.charAt(i);
result.setText(result.getText()+a);
}
}
else
result.setText("-"+s);
}
/*实现加减乘除的功能*/
if (t==add||t==sub||t==mul||t == div) {
/*加*/
if (t==add) {
tran1=Double.parseDouble(result.getText());
result.setText("");
sign=1;
}
/*减*/
if (t == sub) {
tran1=Double.parseDouble(result.getText());
result.setText("");
sign=2;
}
/*乘*/
if (t==mul) {
tran1=Double.parseDouble(result.getText());
result.setText("");
sign=3;
}
/*除*/
if (t == div) {
tran1=Double.parseDouble(result.getText());
result.setText("");
sign=4;
}
}
/*根据运算符号,实现等号的功能*/
if (t == equal) {
tran2=Double.parseDouble(result.getText());
switch (sign) {
case 1://加法
tran1+=Double.parseDouble(result.getText());
result.setText(""+tran1);
break;
case 2://减法
tran1-=Double.parseDouble(result.getText());
result.setText(""+tran1);
break;
case 3://乘法
tran1*=Double.parseDouble(result.getText());
result.setText(""+tran1);
break;
case 4://除法
if (tran2==0) {
result.setText("除数不能为零");
break;
}
else
tran1/=Double.parseDouble(result.getText());
result.setText(""+tran1);
break;
}
}
/*实现开方功能*/
if (t==sqrt) {
tran2=Double.parseDouble(result.getText());
if (tran2<0)
result.setText("负数无法开方");
else {
tran2=Math.sqrt(tran2);
result.setText(""+tran2);
}
}
/*实现求百分数的功能*/
if (t==percent) {
if (tran1==0) {
String s=result.getText();
result.setText(s);
}
else {
tran2=Double.parseDouble(result.getText());
tran2=tran2/100.0;
result.setText(""+tran2);
}
}
/*实现求倒数*/
if (t==dao) {
tran2=Double.parseDouble(result.getText());
if (tran2==0)
result.setText("0不可求倒数");
else {
tran2=1.0/tran2;
result.setText(""+tran2);
}
}
/*实现内存运算*/
if (t==mc) {//内存清空
memo=0;
mtext.setText("");
}
if (t==mr) {//读取内存
if (memo!=0)
result.setText(""+memo);
}
if (t==ms) {//写入内存
memo=Double.parseDouble(result.getText());
mtext.setText("M");
}
if (t==madd) {//显示的数字与内存数求和,并存入内存
tran2=Double.parseDouble(result.getText());
memo=memo+tran2;
}
/*实现编辑菜单中的复制功能*/
if (t==copy){
cp=Double.parseDouble(result.getText());
cpable=true;
}
/*实现编辑菜单中的粘贴功能*/
if (t==paste){
if (cpable==true)
result.setText(""+cp);
else
result.setText(result.getText());
}
/*以下为一些修饰功能*/
if (t==tcal){//点击"查看"菜单中的"标准型"
dia=new Dialog(tcalculator.this,"消息");
sure=new Button("确定");
l1=new Label("欢迎使用标准计算器");
l1.setAlignment(Label.CENTER);
dia.setLayout(new BorderLayout());
dia.add("Center",l1);
dia.add("South",sure);
dia.setSize(200,100);
dia.setVisible(true);
sure.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent x) {
dia.dispose();
}
});
}
if (t==scal){//点击"查看"菜单中的"科学型"
dia=new Dialog(tcalculator.this,"消息");
sure=new Button("确定");
l1=new Label("敬请期待科学型计算器,感谢使用!");
l1.setAlignment(Label.CENTER);
dia.setLayout(new BorderLayout());
dia.add("Center",l1);
dia.add("South",sure);
dia.setSize(200,100);
dia.setVisible(true);
sure.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent x) {
dia.dispose();
}
});
}
if (t==about){//点击"帮助"菜单中的"关于计算器"
dia=new Dialog(tcalculator.this,"消息");
sure=new Button("确定");
l1=new Label("感谢丁振凡老师");
l2=new Label("感谢开发人员:");
l3=new Label("谢治宇、白正清、高项荣、王晓林、许青松");
l1.setFont(new Font("隶书",Font.PLAIN,18));
l2.setFont(new Font("隶书",Font.PLAIN,18));
l3.setFont(new Font("隶书",Font.PLAIN,18));
l1.setAlignment(Label.CENTER);
l2.setAlignment(Label.CENTER);
l3.setAlignment(Label.CENTER);
dia.setLayout(new GridLayout(4,1));
dia.add(l1);
dia.add(l2);
dia.add(l3);
dia.add(sure);
dia.setSize(400,300);
dia.setVisible(true);
sure.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent x) {
dia.dispose();
}
});
}
} catch(Exception ex){
result.setText("操作错误!");//异常的处理方式
}
}
/*主方法的调用*/
public static void main(String args[]) {
Frame x=new tcalculator();
x.setSize(500,250);
x.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -