📄 counter.java
字号:
import java.awt.*; //图形用户界面核心包,提供图形用户界面的类和接口;
import javax.swing.*; //提供一组“轻量级”(全部是 Java 语言)组件;
import java.awt.event.*; //提供事件和监听器的类和接口;
class Counter extends WindowAdapter
{
static JFrame f=new JFrame("计算器"); //带标题的框架构造方法,框架标题设置为“计算器”;
static JTextField text1=new JTextField(" "); //设置显示初值;
static String source=" "; //存储第一个运算的数字,转换为字符串存储;
static String cal=""; //存储运算符;
static String object=""; //存储第二个运算的数字;
static boolean flag=false; //控制输入的数字是连到当前数字后面还是重新输入的;
public void init() //构建计算器显示界面窗口;
{
Container c=f.getContentPane(); //实例化一个容器类;
JPanel pan1=new JPanel();
JButton b1=new JButton("1"); //定义按钮
JButton b2=new JButton("2");
JButton b3=new JButton("3");
JButton b4=new JButton("4");
JButton b5=new JButton("5");
JButton b6=new JButton("6");
JButton b7=new JButton("7");
JButton b8=new JButton("8");
JButton b9=new JButton("9");
JButton b0=new JButton("0");
JButton b11=new JButton("+");
JButton b12=new JButton("-");
JButton b13=new JButton("*");
JButton b14=new JButton("/");
JButton b15=new JButton(".");
JButton b16=new JButton("%");
JButton b17=new JButton("P");
JButton b18=new JButton("√");
JButton b19=new JButton("!");
JButton b20=new JButton("=");
JButton bclar=new JButton("清零");
text1.setHorizontalAlignment(JTextField.RIGHT); //设置水平对齐方式为右对齐;
c.add(text1,"North"); //将显示输出结果的文本框添加到北域;
c.add(pan1);
qufan m=new qufan();//取反按钮的方法;
Num aa=new Num(); //数字类按钮;
Result re=new Result(); //“=”按钮;
Opertion op=new Opertion(); //运算按钮,如+、-、*等;
Clear cl=new Clear(); //清除键;
b1.addActionListener(aa); //每个按钮注册时间监听对象;
b2.addActionListener(aa);
b3.addActionListener(aa);
b4.addActionListener(aa);
b5.addActionListener(aa);
b6.addActionListener(aa);
b7.addActionListener(aa);
b8.addActionListener(aa);
b9.addActionListener(aa);
b0.addActionListener(aa);
b11.addActionListener(op);
b12.addActionListener(op);
b13.addActionListener(op);
b14.addActionListener(op);
b16.addActionListener(op);
b17.addActionListener(op);
b18.addActionListener(op);
b19.addActionListener(m);
b20.addActionListener(re);
b15.addActionListener(aa);
bclar.addActionListener(cl);
pan1.add(b1); //添加按钮;
pan1.add(b2);
pan1.add(b3);
pan1.add(b11);
pan1.add(b4);
pan1.add(b5);
pan1.add(b6);
pan1.add(b12);
pan1.add(b7);
pan1.add(b8);
pan1.add(b9);
pan1.add(b13);
pan1.add(b0);
pan1.add(b18);
pan1.add(b16);
pan1.add(b14);
pan1.add(b15);
pan1.add(b19);
pan1.add(b17);
pan1.add(b20);
pan1.add(bclar);
f.setSize(200,255); //设置框架尺寸;
f.setVisible(true); //显示窗体;
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//按关闭键后关闭;
}
class Num implements ActionListener //按数字按钮之后的处理方法
{
public void actionPerformed(ActionEvent e)
{
String a=text1.getText(); //存储当前正在显示的内容,以字符串方式存储;
String s=e.getActionCommand(); //得到按下按钮之后的内容;
if(a.equals(" ")||a.equals("+")||a.equals("-")||a.equals("*")||a.equals("/")
||a.equals("%")||a.equals("P")||a.equals("M")||a.equals("√"))
text1.setText(s);//判断若为首次进行计算,或者运算符之后的输入,则显示对应的内容;
else {
if(flag)
{
text1.setText(s); //如果当前显示的是上次的运算结果,则应该重新开始;
flag=false;
}
else
text1.setText(a+s); //否则连接到当前字符串后面;
}
}
}
class Opertion implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
cal=e.getActionCommand();//用cal储存运算符;
source=text1.getText();
text1.setText(cal); //把运算符按钮的内容显示到文本框;
}
}
class Result implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
double num1;
num1=Double.parseDouble(source); //把第一个数字转换为double型变量;
object=text1.getText();
double num2;
num2=Double.parseDouble(object); //把第二个数字转换为double型变量;
double result=0; //保存运算结果;
if(cal.equals("+"))
result=num1+num2;
if(cal.equals("-"))
result=num1-num2;
if(cal.equals("*"))
result=num1*num2;
if(cal.equals("/"))//计算除法运算;
{
if(num1!=0&&num2==0)
{text1.setText("无穷大");
return;
}
else if(num1==0&&num2==0)
result=1;
else
result=num1/num2;
}
if(cal.equals("P")) //计算x的y次方;
result=Math.pow(num1,num2);
if(cal.equals("%"))
result=num1%num2;
if(cal.equals("√")) //计算x的y次根号;
{
if(num1<0)
{if(num1<0&&num2%2==0)//负数开偶次根号,提示出错;
{
text1.setText("本计算器暂不支持负数开偶次方");
return ;
}
else if (num1<0 && num2%2==1)//负数开根号;
result=0-(Math.exp( 1/ num2 * Math.log(Math.abs(num1))));
}
else
result = (Math.exp( 1/ num2 * Math.log(num1)));
}
String s1=Double.toString(result);//将计算结果转换为字符串存储,方便下面的输出;
text1.setText(s1);
flag=true; //完成一次运算,置为true;
}
}
class Clear implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
text1.setText(" "); //按下清零键后,文本显示空白;
}
}
class qufan implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String huang=text1.getText();
text1.setText(" ");
text1.setText("-"+ huang ); //按下取反键后,输入的数字变为负数;
}
}
public static void main(String[] args)
{
Counter count=new Counter();
count.init();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -