📄 calculator.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator extends JFrame implements ActionListener{
private boolean isFloat;
private String OperatorCurrent,OperatorPre;
private String ForeScreen,BackScreen;
private boolean flag = false;
private JPanel displayPanel;
private JPanel p1;
private JPanel functionPanel;
private JPanel inputPanel;
private Container container;
private JTextField result;
public Calculator()
{
isFloat =false;
OperatorCurrent = new String("");
OperatorPre = new String("");
ForeScreen = new String("");
BackScreen = new String("");
container = getContentPane();
container.setLayout(new BorderLayout());
displayPanel = new JPanel();
displayPanel.setLayout(new BorderLayout());
result = new JTextField();
displayPanel.add(result,BorderLayout.CENTER);
container.add(displayPanel,BorderLayout.NORTH);
functionPanel = new JPanel();
functionPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
JButton back=new JButton("Back");
JButton ce=new JButton("CE");
JButton c=new JButton("C");
JButton jbt7=new JButton("7");
JButton jbt8=new JButton("8");
JButton jbt9=new JButton("9");
JButton jbtc=new JButton("/");
JButton jbts=new JButton("sqrt");
JButton jbt4=new JButton("4");
JButton jbt5=new JButton("5");
JButton jbt6=new JButton("6");
JButton jbtm=new JButton("*");
JButton jbty=new JButton("%");
JButton jbt1=new JButton("1");
JButton jbt2=new JButton("2");
JButton jbt3=new JButton("3");
JButton jbtr=new JButton("-");
JButton jbtd=new JButton("1/x");
JButton jbt0=new JButton("0");
JButton jbtf=new JButton("+/-");
JButton jbtdi=new JButton(".");
JButton jbtj=new JButton("+");
JButton jbtde=new JButton("=");
functionPanel.add(back);
functionPanel.add(ce);
functionPanel.add(c);
p1=new JPanel();
p1.setLayout(new BorderLayout());
p1.add(functionPanel,BorderLayout.NORTH);
inputPanel=new JPanel();
inputPanel.setLayout(new GridLayout(4,5));
inputPanel.add(jbt7);
inputPanel.add(jbt8);
inputPanel.add(jbt9);
inputPanel.add(jbtc);
inputPanel.add(jbts);
inputPanel.add(jbt4);
inputPanel.add(jbt5);
inputPanel.add(jbt6);
inputPanel.add(jbtm);
inputPanel.add(jbty);
inputPanel.add(jbt1);
inputPanel.add(jbt2);
inputPanel.add(jbt3);
inputPanel.add(jbtr);
inputPanel.add(jbtd);
inputPanel.add(jbt0);
inputPanel.add(jbtf);
inputPanel.add(jbtdi);
inputPanel.add(jbtj);
inputPanel.add(jbtde);
p1.add(inputPanel,BorderLayout.CENTER);
container.add(p1,BorderLayout.CENTER);
back.addActionListener(this);
ce.addActionListener(this);
c.addActionListener(this);
jbt7.addActionListener(this);
jbt8.addActionListener(this);
jbt9.addActionListener(this);
jbtc.addActionListener(this);
jbts.addActionListener(this);
jbt4.addActionListener(this);
jbt5.addActionListener(this);
jbt6.addActionListener(this);
jbtm.addActionListener(this);
jbty.addActionListener(this);
jbt1.addActionListener(this);
jbt2.addActionListener(this);
jbt3.addActionListener(this);
jbtr.addActionListener(this);
jbtd.addActionListener(this);
jbt0.addActionListener(this);
jbtf.addActionListener(this);
jbtdi.addActionListener(this);
jbtj.addActionListener(this);
jbtde.addActionListener(this);
}
public static void main(String[] args){
Calculator test=new Calculator();
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setSize(350,350);
test.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
String s = new String("");
String op = s;
s = e.getActionCommand();
if((s.compareTo("0")==0)||(s.compareTo("1")==0)||(s.compareTo("2")==0)||(s.compareTo("3")==0)||(s.compareTo("4")==0)||(s.compareTo("5")==0)||(s.compareTo("6")==0)||(s.compareTo("7")==0)||(s.compareTo("8")==0)||(s.compareTo("9")==0)||(s.compareTo(".")==0))
if(s.compareTo(".")!=0)
{
if(!flag)
{
ForeScreen += s;
result.setText(ForeScreen);
}
else
{
ForeScreen = "";
result.setText(s);
flag = false;
}
}
else
{
if((s.compareTo(".")==0)&&isFloat==false)
{
isFloat = true;
if(ForeScreen.equals(""))
ForeScreen+= "0." ;
else
{
ForeScreen += s;
result.setText(ForeScreen);
}
}
}
if((s.compareTo("/")==0)||(s.compareTo("*")==0)||(s.compareTo("+")==0)||(s.compareTo("-")==0)||(s.compareTo("%")==0))
{
flag = true;
if(!result.getText().equals(""))
{
OperatorCurrent = s;
calculatea();
}
else
OperatorPre = s;
}
if((s.compareTo("1/x")==0)||(s.compareTo("sqrt")==0))
{
if(!result.getText().equals(""))
{
op = s;
calculateb(op);
}
}
if((s.compareTo("+/-")==0))
{
double Num;
Num = Double.parseDouble(result.getText());
if(result.getText().compareTo("")!=0)
{
if(Num>0)
{
Num = 0 - Num;
ForeScreen = Double.toString(Num);
result.setText(ForeScreen);
}
else
if(Num<0)
{
Num = 0-Num;
ForeScreen = Double.toString(Num);
result.setText(ForeScreen);
}
else
{
s = new String("0");
result.setText(s);
}
}
}
if((s.compareTo("Back")==0))
{
String str = new String("");
if(result.getText().compareTo("0")!=0)
{
str = result.getText();
ForeScreen = new String("");
for(int i = 0;i<str.length()-1;i++)
{
ForeScreen += str.charAt(i) ;
}
if(ForeScreen.compareTo("")==0)
{
s = new String("0");
result.setText(s);
}
else
result.setText(ForeScreen);
}
else
{
s = new String("0");
result.setText(s);
}
}
if((s.compareTo("CE")==0))
{
s = new String("0");
ForeScreen = new String("");
result.setText(s);
}
if((s.compareTo("C")==0))
{
s = new String("0");
ForeScreen = new String("");
BackScreen = new String("");
OperatorCurrent = new String("");
OperatorPre = new String("");
isFloat = false;
result.setText(s);
}
if((s.compareTo("=")==0))
{
if(OperatorPre.equals("+")||OperatorPre.equals("-")||OperatorPre.equals("*")||OperatorPre.equals("/")||OperatorPre.equals("%"))
{
calculatea();
OperatorPre = new String("");
}
else
calculateb(op);
}
}
public void calculateb(String s)
{
double dFore,d1;
if(s.equals("sqrt"))
{
dFore = Double.parseDouble(result.getText());
if(result.getText().charAt(0)=='-')
{
result.setText("负数没有平方根,请重新输入数据!");
ForeScreen = new String("");
}
else
{
d1 = Math.sqrt(dFore);
ForeScreen = Double.toString(d1);
result.setText(ForeScreen);
}
}
if(s.equals("1/x"))
{
dFore = Double.parseDouble(result.getText());
if(result.getText().equals("0"))
{
result.setText("分母不能为0,请重新输入数据!");
ForeScreen = new String("");
}
else
{
d1 = (double)(1.0/dFore);
ForeScreen = Double.toString(d1);
result.setText(ForeScreen);
}
}
}
public void calculatea()
{
double NumBack,NumFore,d;
if(OperatorPre.equals(""))
{
BackScreen = result.getText();
ForeScreen = new String("");
result.setText(BackScreen);
OperatorPre = OperatorCurrent;
}
else
{
if(!flag)
{
NumBack = Double.parseDouble(BackScreen);
NumFore = Double.parseDouble(result.getText());
BackScreen = result.getText();
ForeScreen = "";
if(OperatorPre.compareTo("+")==0)
{
d = (double)(NumBack + NumFore);
BackScreen = Double.toString(d);
System.out.print(d);
result.setText(BackScreen);
}
if(OperatorPre.compareTo("-")==0)
{
d = NumBack - NumFore;
BackScreen = Double.toString(d);
result.setText(BackScreen);
}
if(OperatorPre.compareTo("*")==0)
{
d = NumBack * NumFore;
BackScreen = Double.toString(d);
result.setText(BackScreen);
}
if(OperatorPre.compareTo("/")==0)
{
if(result.getText().equals("0"))
{
result.setText("除数不能为0,请重新输入!");
}
else
{
d = (double)(NumBack / NumFore);
BackScreen = Double.toString(d);
result.setText(BackScreen);
}
}
if(OperatorPre.compareTo("%")==0)
{
if(result.getText().equals("0"))
{
result.setText("不能为负数,请重新输入数据!");
ForeScreen = new String("");
}
else
{
int i = (int)(NumBack / NumFore);
d = (double)(NumBack / NumFore);
i = (int)d-i;
BackScreen = Double.toString(i);
result.setText(BackScreen);
}
}
}
OperatorPre = OperatorCurrent;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -