📄 jlab1002a.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Calculator extends JFrame{
JFrame frame; //顶层容器
JButton numberButton[]; //数字按钮
JButton operationButton[]; //运算符号
JButton specialButton[]; //特殊符号
JButton buttonPoint,buttonEqual,buttonSqrt,buttonReciprocal,
buttonPercentage,buttonShift,buttonEmpty; //其它符号
String symbol[]={"+","-","*","/"};
String specialSymbol[]={" Backspace "," CE "," C ","MC","MR","MS","M+"};
JPanel paneRightUp,paneMain,pane,paneEmpty,paneLeftDown,paneLeft,paneRight,paneDown; //创建面板
JTextField textField; //显示区域
float leftFloat,rightFloat,resultFloat=0,msFloat;//记录左右操作数以及结果
boolean error=false; //标志有没有出现错误
boolean number=false,operation=false,total=false; //标志前一个按钮按下的是哪一个键
boolean point=false; //标志是否按下点
boolean first=true; //标志是否是第一次输入
char symbol1; //记录操作符
Toolkit toolkit; //调用蜂鸣声
public Calculator(String s){
super(s);
createButton();
layOut();
function();
}
public void createButton(){
toolkit=Toolkit.getDefaultToolkit();
frame=new JFrame();
ActionListener number=new NumberAction(); //数字监听器
ActionListener operation=new OperationAction(); //运算符号监听器
MyKeyListener myListener=new MyKeyListener(); //键盘监听器
//数字键
numberButton=new JButton[10];
for(int i=0;i<10;i++)
{
numberButton[i]=new JButton(String.valueOf(i));
numberButton[i].setBackground(Color.LIGHT_GRAY);
numberButton[i].setForeground(Color.BLUE);
numberButton[i].addActionListener(number);
}
//运算符
operationButton=new JButton[4];
for(int i=0;i<4;i++)
{
operationButton[i]=new JButton(symbol[i]);
operationButton[i].setBackground(Color.LIGHT_GRAY);
operationButton[i].setForeground(Color.red);
operationButton[i].addActionListener(operation);
}
//特殊功能键
specialButton=new JButton[7];
for(int i=0;i<7;i++)
{
specialButton[i]=new JButton(specialSymbol[i]);
specialButton[i].setBackground(Color.LIGHT_GRAY);
specialButton[i].setForeground(Color.RED);
}
//普通功能键
buttonPoint=new JButton(".");
buttonPoint.setBackground(Color.LIGHT_GRAY);
buttonPoint.setForeground(Color.blue);
buttonEqual=new JButton("=");
buttonEqual.setBackground(Color.LIGHT_GRAY);
buttonEqual.setForeground(Color.red);
buttonSqrt=new JButton("sqrt");
buttonSqrt.setBackground(Color.LIGHT_GRAY);
buttonSqrt.setForeground(Color.blue);
buttonReciprocal=new JButton("1/x");
buttonReciprocal.setBackground(Color.LIGHT_GRAY);
buttonReciprocal.setForeground(Color.blue);
buttonPercentage=new JButton("%");
buttonPercentage.setBackground(Color.LIGHT_GRAY);
buttonPercentage.setForeground(Color.blue);
buttonShift=new JButton("+/-");
buttonShift.setBackground(Color.LIGHT_GRAY);
buttonShift.setForeground(Color.blue);
buttonEmpty=new JButton(" ");
buttonEmpty.setBackground(Color.LIGHT_GRAY);
buttonEmpty.setForeground(Color.blue);
buttonEmpty.setEnabled(false);
//显示栏
textField=new JTextField("0.");
textField.addKeyListener(myListener);
textField.setHorizontalAlignment(JTextField.RIGHT);
textField.setBackground(Color.white);
textField.setEditable(false);
}
public void layOut(){
JPanel pane=new JPanel();
pane.setLayout(new BorderLayout());
pane.add(textField,BorderLayout.NORTH); //文本框放在最上面
//下面将面板分成3个小部分进行组件的排列
paneEmpty=new JPanel();
paneEmpty.add(buttonEmpty);
paneRightUp=new JPanel();
paneRightUp.setLayout(new FlowLayout());
paneRightUp.add(specialButton[0]);
paneRightUp.add(specialButton[1]);
paneRightUp.add(specialButton[2]);
paneMain=new JPanel();
paneMain.setLayout(new GridLayout(4,5,5,5));
paneMain.add(numberButton[7]);
paneMain.add(numberButton[7]);
paneMain.add(numberButton[8]);
paneMain.add(numberButton[9]);
paneMain.add(operationButton[3]);
paneMain.add(buttonSqrt);
paneMain.add(numberButton[4]);
paneMain.add(numberButton[5]);
paneMain.add(numberButton[6]);
paneMain.add(operationButton[2]);
paneMain.add(buttonPercentage);
paneMain.add(numberButton[1]);
paneMain.add(numberButton[2]);
paneMain.add(numberButton[3]);
paneMain.add(operationButton[1]);
paneMain.add(buttonReciprocal);
paneMain.add(numberButton[0]);
paneMain.add(buttonShift);
paneMain.add(buttonPoint);
paneMain.add(operationButton[0]);
paneMain.add(buttonEqual); //end of paneMain
paneLeftDown=new JPanel();
paneLeftDown.setLayout(new GridLayout(4,1,5,5));
paneLeftDown.add(specialButton[3]);
paneLeftDown.add(specialButton[4]);
paneLeftDown.add(specialButton[5]);
paneLeftDown.add(specialButton[6]);
paneLeft=new JPanel();
paneLeft.setLayout(new BorderLayout());
paneLeft.add(paneEmpty,BorderLayout.NORTH);
paneLeft.add(paneLeftDown,BorderLayout.CENTER);
paneRight=new JPanel();
paneRight.setLayout(new BorderLayout());
paneRight.add(paneRightUp,BorderLayout.NORTH);
paneRight.add(paneMain,BorderLayout.CENTER);
paneDown=new JPanel();
paneDown.add(paneLeft);
paneDown.add(paneRight);
pane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
pane.add(paneDown,BorderLayout.CENTER);
frame.getContentPane().add(pane);
frame.setVisible(true);
frame.setSize(440,260);
setBackground(Color.LIGHT_GRAY);
frame.validate();
}
public void function(){
//等于号
buttonEqual.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
equal();
}
});
//开方
buttonSqrt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(!error){
String temp=textField.getText();
int i=temp.length();
if(temp.charAt(i-1)=='.'){
String temp1=temp.substring(0,i-1);
rightFloat=Float.valueOf(temp1).floatValue(); //最后一位为小数点,则此数为整型
}
else
rightFloat=Float.valueOf(temp).floatValue(); //最后一位不是小数点,则此数为float型
if(rightFloat<0)
{textField.setText("函数输入无效");error=true;}
else{
resultFloat=(float)Math.sqrt((double)rightFloat);
String t=String.valueOf(resultFloat);
int j=t.length();
if(t.charAt(j-1)=='0'&&t.charAt(j-2)=='.'){
String r=t.substring(0,j-2);
textField.setText(r+".");
}
else textField.setText(""+resultFloat);
}
first=true;
point=false;
total=true;
operation=false;
number=false;
}
else toolkit.beep();
}
});
//倒数
buttonReciprocal.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(!error){
String temp=textField.getText();
int i=temp.length();
if(temp.charAt(i-1)=='.'){
String temp1=temp.substring(0,i-1);
rightFloat=Float.valueOf(temp1).floatValue(); //最后一位为小数点,则此数为整型
}
else
rightFloat=Float.valueOf(temp).floatValue(); //最后一位不是小数点,则此数为float型
if(rightFloat==0.0){
textField.setText("除数不能为零");
error=true;
}
else{
resultFloat=1/rightFloat;
String t=String.valueOf(resultFloat);
int j=t.length();
if(t.charAt(j-1)=='0'&&t.charAt(j-2)=='.'){
String r=t.substring(0,j-2);
textField.setText(r+".");
}
else textField.setText(""+resultFloat);
}
first=true;
point=false;
total=true;
operation=false;
number=false;
}
else toolkit.beep();
}
});
//百分号
buttonPercentage.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(!error){
resultFloat=rightFloat/100;
String t=String.valueOf(resultFloat);
int j=t.length();
if(t.charAt(j-1)=='0'&&t.charAt(j-2)=='.'){
String r=t.substring(0,j-2);
textField.setText(r+".");
}
textField.setText(""+resultFloat);
first=true;
point=false;
total=true;
operation=false;
number=false;
}
else toolkit.beep();
}
});
//Backspace
specialButton[0].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
backspace();
}
});
//小数点
buttonPoint.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
point();
}
});
//切换正负号
buttonShift.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(!error){
String s=textField.getText();
if(s.charAt(0)=='-'){
StringBuffer s1=new StringBuffer(s);
s1.deleteCharAt(0);
s=new String(s1);
textField.setText(s);
}
else{
if(!s.equalsIgnoreCase("0."))
textField.setText("-"+textField.getText());
}
}
toolkit.beep();
}
});
//C
specialButton[2].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
textField.setText("0.");
error=false;
point=false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -