📄 mycalculator.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.text.NumberFormat;
public class MyCalculator extends JFrame implements ActionListener
{
Panel panelA;
Panel panelB;
JTextField answerwindow;
JTextField tempwindow;
LinkedList list;
boolean equalflag=false;
LinkedList memorylist;
NumberButton numberButton[];
ControlButton control[];
FunctionButton function[];
String controlstring[]={"+","-","*","/"};
String functionstring[]={"BackSpace","CE","C","sqrt","%","1/x","=","MC",
"MR","MS","M+","+/-","."};
public MyCalculator()
{
super("CS0311 熊涛的计算器");
list=new LinkedList();
memorylist=new LinkedList();
numberButton=new NumberButton[10];
control=new ControlButton[4];
function=new FunctionButton[13];
for(int i=0;i<10;i++){
numberButton[i]=new NumberButton(i);
numberButton[i].addActionListener(this);
}
for(int i=0;i<4;i++){
control[i]=new ControlButton(controlstring[i]);
control[i].addActionListener(this);
}
for(int i=0;i<13;i++){
function[i]=new FunctionButton(functionstring[i]);
function[i].addActionListener(this);
}
answerwindow=new JTextField("0");
answerwindow.setHorizontalAlignment(JTextField.RIGHT);
answerwindow.setForeground(Color.blue);
answerwindow.setFont(new Font("TimesRoman",Font.PLAIN,14));
answerwindow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
answerwindow.setBackground(Color.white);
answerwindow.setEditable(false);
tempwindow=new JTextField("0");
tempwindow.setHorizontalAlignment(JTextField.RIGHT);
tempwindow.setForeground(Color.blue);
tempwindow.setFont(new Font("TimesRoman",Font.PLAIN,14));
tempwindow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
tempwindow.setBackground(Color.cyan);
tempwindow.setEditable(false);
panelA=new Panel();
panelA.setLayout(new GridLayout(4,6));
panelA.add(function[7]);
panelA.add(numberButton[7]);
panelA.add(numberButton[8]);
panelA.add(numberButton[9]);
panelA.add(control[3]);
panelA.add(function[3]);
panelA.add(function[8]);
panelA.add(numberButton[4]);
panelA.add(numberButton[5]);
panelA.add(numberButton[6]);
panelA.add(control[2]);
panelA.add(function[4]);
panelA.add(function[9]);
panelA.add(numberButton[1]);
panelA.add(numberButton[2]);
panelA.add(numberButton[3]);
panelA.add(control[1]);
panelA.add(function[5]);
panelA.add(function[10]);
panelA.add(numberButton[0]);
panelA.add(function[11]);
panelA.add(function[12]);
panelA.add(control[0]);
panelA.add(function[6]);
panelB=new Panel();
panelB.setLayout(new GridLayout(1,3));
panelB.add(function[0]);
panelB.add(function[1]);
panelB.add(function[2]);
add(answerwindow,BorderLayout.NORTH);
add(tempwindow,BorderLayout.CENTER);
add(panelB,BorderLayout.EAST);
add(panelA,BorderLayout.SOUTH);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
setVisible(true);
setBounds(100,50,480,200);
setResizable(false);
validate();
}
public void actionPerformed(ActionEvent e){
if(e.getSource() instanceof NumberButton){
NumberButton b=(NumberButton)e.getSource();
if(list.size()==0){
int number=b.getNumber();
list.add(""+number);
answerwindow.setText(""+number);
equalflag=false;
}
else if(list.size()==1 && equalflag==false){
int number=b.getNumber();
String num=(String)list.getFirst();
String s=num.concat(""+number);
list.set(0,s);
answerwindow.setText(s);
}
else if(list.size()==1 && equalflag==true){
int number=b.getNumber();
list.removeFirst();
list.add(""+number);
equalflag=false;
answerwindow.setText(""+number);
}
else if(list.size()==2){
int number=b.getNumber();
list.add(""+number);
answerwindow.setText(""+number);
}
else if(list.size()==3){
int number=b.getNumber();
String num=(String)list.getLast();
String s=num.concat(""+number);
list.set(2,s);
answerwindow.setText(s);
}
}
else if(e.getSource() instanceof ControlButton){
ControlButton b=(ControlButton)e.getSource();
if(list.size()==1){
String con=b.getControl();
list.add(con);
}
else if(list.size()==2){
String con=b.getControl();
list.set(1,con);
}
else if(list.size()==3){
String con=b.getControl();
String number1=(String)list.getFirst();
String number2=(String)list.getLast();
String control=(String)list.get(1);
try{
double n1=Double.parseDouble(number1);
double n2=Double.parseDouble(number2);
double n=0;
if(control.equals("+")){
n=n1+n2;
}
else if(control.equals("-")){
n=n1-n2;
}
else if(control.equals("*")){
n=n1*n2;
}
else if(control.equals("/")){
n=n1/n2;
}
list.clear();
list.add(""+n);
list.add(con);
answerwindow.setText(""+n);
}catch(Exception ee){}
}
}
else if(e.getSource() instanceof FunctionButton){
FunctionButton b=(FunctionButton)e.getSource();
if(b.getFunction()=="="){
equalflag=true;
if(list.size()==1 || list.size()==2){
String num=(String)list.getFirst();
answerwindow.setText(""+num);
}
else if(list.size()==3){
String number1=(String)list.getFirst();
String number2=(String)list.getLast();
String control=(String)list.get(1);
try{
double n1=Double.parseDouble(number1);
double n2=Double.parseDouble(number2);
double n=0;
if(control.equals("+")){
n=n1+n2;
}
else if(control.equals("-")){
n=n1-n2;
}
else if(control.equals("*")){
n=n1*n2;
}
else if(control.equals("/")){
n=n1/n2;
}
answerwindow.setText(""+n);
list.set(0,""+n);
list.removeLast();
list.removeLast();
}catch(Exception ee){}
}
}
else if(b.getFunction()=="."){
if(list.size()==0){
equalflag=false;
}
else if(list.size()==1){
String dot=".";
String num=(String)list.getFirst();
String s=null;
if(num.indexOf(dot)==-1){
s=num.concat(dot);
list.set(0,s);
}
else{
s=num;
}
list.set(0,s);
answerwindow.setText(s);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -