📄 keyspanel.java
字号:
/*
作者:谭建枚 05应数2班 学号200530770224
日期:2007.5.12
介绍:
一个计算器程序类,功能除了正规的加.减.乘.除之外,还有
求百分率,平方,开方,阶乘,退格,重置,清零,正负号,乘以PI,sin,cos,tan.等
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JLabel;
public class keysPanel extends JPanel
{
private JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16;//数字和加减乘除按钮
private JButton cb1,cb2,cb3,cb4,cb5,cb6,cb7,cb8,cb9,cb10,cb11,cb12;//其他运算符号和控制按钮
private JLabel num1Label,num2Label,calLabel;
public Container resultLabel;
private double num1=0.0,num2=0.0,bfnum,minue=0.00000001;
private int delnum=10;
private boolean del=false,chnum=true,ag=true; /*del--小数点;
chnum--区分数据1和数据2;
ag--again判断输入的状态是继续还是重来*/
private String str1=new String(),str2=new String(),cal=new String(" ");
public keysPanel()
{
num1Label=new JLabel(" ");
num2Label=new JLabel(" ");
calLabel=new JLabel(" ");
resultLabel=new Container();
resultLabel.setLayout(new BorderLayout());
resultLabel.add(num1Label,BorderLayout.NORTH);
resultLabel.add(calLabel,BorderLayout.WEST);
resultLabel.add(num2Label,BorderLayout.CENTER);
setBackground(Color.green);
setLayout(new GridLayout(4,4));
//set buttons
b1=new JButton("1");
b2=new JButton("2");
b3=new JButton("3");
b4=new JButton("4");
b5=new JButton("5");
b6=new JButton("6");
b7=new JButton("7");
b8=new JButton("8");
b9=new JButton("9");
b10=new JButton("0");
b11=new JButton(".");
b12=new JButton("=");
b13=new JButton("+");
b14=new JButton("-");
b15=new JButton("*");
b16=new JButton("÷");
cb1=new JButton("%");
cb2=new JButton("<--");
cb3=new JButton("pi");
cb4=new JButton("sqrt");
cb5=new JButton("CE");
cb6=new JButton("sin");
cb7=new JButton("^2");
cb8=new JButton("AC");
cb9=new JButton("cos");
cb10=new JButton("x!");
cb11=new JButton("+/-");
cb12=new JButton("tan");
ButtonListener1 blistener1=new ButtonListener1();
ButtonListener2 blistener2=new ButtonListener2();
b1.addActionListener(blistener1);
b2.addActionListener(blistener1);
b3.addActionListener(blistener1);
b4.addActionListener(blistener1);
b5.addActionListener(blistener1);
b6.addActionListener(blistener1);
b7.addActionListener(blistener1);
b8.addActionListener(blistener1);
b9.addActionListener(blistener1);
b10.addActionListener(blistener1);
b11.addActionListener(blistener2);
b12.addActionListener(blistener2);
b13.addActionListener(blistener2);
b14.addActionListener(blistener2);
b15.addActionListener(blistener2);
b16.addActionListener(blistener2);
cb1.addActionListener(blistener2);
cb2.addActionListener(blistener2);
cb3.addActionListener(blistener1);
cb4.addActionListener(blistener2);
cb5.addActionListener(blistener2);
cb6.addActionListener(blistener2);
cb7.addActionListener(blistener2);
cb8.addActionListener(blistener2);
cb9.addActionListener(blistener2);
cb10.addActionListener(blistener2);
cb11.addActionListener(blistener1);
cb12.addActionListener(blistener2);
add(b1);add(b2);add(b3);add(b13);add(cb1);add(cb2);add(cb3); //1 |2 |3 |+| % | <--|pi
add(b4);add(b5);add(b6);add(b14);add(cb4);add(cb5);add(cb6); //4 |5 |6 |-|sqrt| CE |sin
add(b7);add(b8);add(b9);add(b15);add(cb7);add(cb8);add(cb9); //7 |8 |9 |*| ^2 | AC |cos
add(b10);add(b11);add(b12);add(b16);add(cb10);add(cb11);add(cb12); //0 |. |= |÷| x! |+/- |tan
}
//calculate计算
public void calculate()
{
try{
if(cal.charAt(0)!=' ')
{
switch(cal.charAt(0))
{
case '+':num1+=num2;break;
case '-':num1-=num2;break;
case '*':num1*=num2;break;
case '/':if(num2!=0)num1/=num2;break;
}
str1=Double.toString(num1);
for(int i=0;i<27-str1.length();i++)str1=" "+str1;
num1Label.setText(str1);
calLabel.setText(cal);
del=false;delnum=10;//小数点
chnum=false;//可以继续输入num2
ag=true;
}
}catch(ArithmeticException problem){}
}
//重置 rest
public void rest()
{
num1=0;num2=0;cal=" ";
del=false;chnum=true;ag=true;
delnum=10;
updatenum();
}
//更新标签
public void updatenum()
{
if(num1<minue&&num1>(-minue))num1=0;
if(num2<minue&&num2>(-minue))num2=0;
str1=Double.toString(num1);
for(int i=0;i<27-str1.length();i++)str1=" "+str1;
num1Label.setText(str1);
str2=Double.toString(num2);
for(int i=0;i<26-str2.length();i++)str2=" "+str2;
num2Label.setText(str2);
calLabel.setText(cal);
}
//求阶乘
public int fac(int n)
{
if(n<=1)return 1;
else return(n*fac(n-1));
}
//退格
public void back()
{
double bu,fu;
if(chnum==true)bu=num1;
else bu=num2;
if(del==true){delnum/=10;bu*=delnum;}
fu=bu%10;
bu-=fu;
bu/=delnum;
if(chnum==true)num1=bu;
else num2=bu;
updatenum();
}
//Button Listener
private class ButtonListener1 implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
if(ag==true){rest();ag=false;}
if(chnum==true)bfnum=num1; //区分数据1和数据2
else bfnum=num2;
if(event.getSource()==cb3){bfnum*=Math.PI;} //乘以pi
else if(event.getSource()==cb11){bfnum=-bfnum;}//转换正负号 +/-
else{
bfnum*=delnum; //小数点数字
if(event.getSource()==b1)bfnum+=1;
else if(event.getSource()==b2)bfnum+=2;
else if(event.getSource()==b3)bfnum+=3;
else if(event.getSource()==b4)bfnum+=4;
else if(event.getSource()==b5)bfnum+=5;
else if(event.getSource()==b6)bfnum+=6;
else if(event.getSource()==b7)bfnum+=7;
else if(event.getSource()==b8)bfnum+=8;
else if(event.getSource()==b9)bfnum+=9;
else if(event.getSource()==b10)bfnum+=0;
if(del==true){bfnum/=delnum;delnum*=10;}//这句无论输入小数还是整数都行,太完美了!
}
if(chnum==true){num1=bfnum;}
else {num2=bfnum;}
updatenum();
}
}
private class ButtonListener2 implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
if(event.getSource()==b13){cal="+";ag=false;} //+
else if(event.getSource()==b14){cal="-";ag=false;} //-
else if(event.getSource()==b15){cal="*";ag=false;} //*
else if(event.getSource()==b16){cal="/";ag=false;} // /
else if(event.getSource()==b12){calculate();return;} //计算
else if(event.getSource()==b11){if(del==false)del=true;return;} //小数点
else if(event.getSource()==cb1){calculate(); //计算百分率
num1*=100;
str1=Double.toString(num1)+"%";
for(int i=0;i<27-str1.length();i++)str1=" "+str1;
num1Label.setText(str1);}
else if(event.getSource()==cb2){back();return;} //退格
else if(event.getSource()==cb4){cal="sqrt";num1=Math.sqrt(num1);updatenum();} //对数据1做开方
else if(event.getSource()==cb5){cal=" ";num2=0;updatenum();} //CE
else if(event.getSource()==cb6){calculate(); //sin
num1=Math.sin(num1);
updatenum();}
else if(event.getSource()==cb7){calculate();num1=num1*num1;updatenum();} //平方
else if(event.getSource()==cb8){rest();return;} //AC
else if(event.getSource()==cb9){calculate(); //cos
num1=Math.cos(num1);
updatenum();}
else if(event.getSource()==cb10){calculate();
if(num1<=10&&num1>=0){num1=(double)fac((int)num1);}
} //求阶乘
else if(event.getSource()==cb12){calculate(); //tan
num1=Math.tan(num1);
updatenum();}
num2=0;
updatenum();
del=false;delnum=10;//小数点
chnum=false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -