📄 calculator.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//该类实现计数器窗口
public class Calculator extends JFrame {
private Container container; //设置容器对象
private GridBagLayout layout; //设置布局对象
private GridBagConstraints constraints;//控制组件的位置
private JTextField displayField;//计算结果显示区
private String lastCommand;//保存+,-,*,/,=命令
private double result;//保存计算结果
private boolean start;//判断是否为数字的开始
//构造函数
public Calculator() {
super("Calculator"); //使用super调用父类的方法
container=getContentPane();
//建立划分方法
layout=new GridBagLayout();
//设置划分方法
container.setLayout(layout);
constraints=new GridBagConstraints(); //初始化组件容器,布局,格式
start=true; //初始化参数为默认值,假设为输入
result=0; //初始化
lastCommand = "="; //初始化
displayField=new JTextField(20); //设置结果显示框
displayField.setHorizontalAlignment(JTextField.RIGHT); //右对齐
constraints.gridx=0;
constraints.gridy=0;
constraints.gridwidth=4;
constraints.gridheight=1;
constraints.fill=GridBagConstraints.BOTH;
constraints.weightx=100;
constraints.weighty=100;
layout.setConstraints(displayField,constraints);
container.add(displayField); //设置所包含的组建的单元格
//格点的横纵坐标为(0,0),宽高为(4,1)
// 填充方式为双向,全部填满(100象素)
// 并将格式应用于组件
//定义Insert和Command两类事件监听器
ActionListener insert = new InsertAction(); //输入数字的监听
ActionListener command = new CommandAction(); //计算的监听
//加入按钮
addButton("Backspace",0,1,2,1,insert); //清除一个数字
addButton("CE",2,1,1,1,insert); //清除
addButton("√",3,1,1,1,command); //开根号
addButton("7",0,2,1,1,insert); //数字按钮,下同
addButton("8",1,2,1,1,insert);
addButton("9",2,2,1,1,insert);
addButton("/",3,2,1,1,command); //除号
addButton("4",0,3,1,1,insert);
addButton("5",1,3,1,1,insert);
addButton("6",2,3,1,1,insert);
addButton("*",3,3,1,1,command); //乘号
addButton("1",0,4,1,1,insert);
addButton("2",1,4,1,1,insert);
addButton("3",2,4,1,1,insert);
addButton("-",3,4,1,1,command); //减号
addButton("0",0,5,1,1,insert);
addButton("+/-",1,5,1,1,insert);//只显示"-"号,"+"没有实用价值 ,输入负数
addButton(".",2,5,1,1,insert); //小数点
addButton("+",3,5,1,1,command); //加号
addButton("=",0,6,4,1,command); //等于号
//并设置了这一系列按钮的位置,大小以及响应事件
setSize(300,300);
setVisible(true);
//设置组件的大小和可是化
}
private void addButton(String label,int row,int column,int with,int height,ActionListener listener) {
//该方法给组件添加按钮
JButton button=new JButton(label);
constraints.gridx=row;
constraints.gridy=column;
constraints.gridwidth=with;
constraints.gridheight=height;
constraints.fill=GridBagConstraints.BOTH;
//上为设置按钮位置和大小(单位为格点数,填充方式为双向)
button.addActionListener(listener);
layout.setConstraints(button,constraints);
container.add(button);
//为按钮指定事件监听器和格式,并将按钮加入组件容器
}
private class InsertAction implements ActionListener //insert事件监听器
{
public void actionPerformed(ActionEvent event)//负责监听事件,并执行对应操//作
{
String input=event.getActionCommand();
if (start) {
displayField.setText("");
start=false; //若输入为数字,则屏幕显示该数字,并设置下一个输入为命令
if(input.equals("+/-"))
displayField.setText(displayField.getText()+"-"); //按下“+/-”,屏幕上显示为负
//号,输入负数
}
if(!input.equals("+/-")) {
if(input.equals("Backspace")) {
String str=displayField.getText();
if(str.length()>0)
displayField.setText(str.substring(0,str.length()-1)); //输入BACKSPACE,执行退//格操作
}else if(input.equals("CE")||input.equals("C")) {
displayField.setText("0"); //输入CE时,屏幕显示为0,作清零操作
start=true;
}else
displayField.setText(displayField.getText()+input); //其余情况显示不变
}
}
}
private class CommandAction implements ActionListener // Command事件监听器接口类
{
public void actionPerformed(ActionEvent evt)//监听事件,执行对应操作
{
String command=evt.getActionCommand(); //获取事件
if(start) {
lastCommand=command; //若输入是数字,则无需处理继续监听
}else {
calculate(Double.parseDouble(displayField.getText()));
lastCommand=command;
start=true; //调入是命令,则调用calculate()方法进行计算,然后继续监听
}
}
}
public void calculate(double x)//该方法实现计算功能
{
if (lastCommand.equals("+")) result+= x; //加法
else if (lastCommand.equals("-")) result-=x; //减法
else if (lastCommand.equals("*")) result*=x; //乘法
else if (lastCommand.equals("/")) result/=x; //除法
else if (lastCommand.equals("=")) result=x;//等于
else if (lastCommand.equals("√")) result=Math.sqrt(x);//平方根
displayField.setText(""+ result); //输出结果
}
public static void main(String []args) {
Calculator calculator=new Calculator(); //打开新的计数器组件窗口
calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -