此仅为自己学习之用,欢迎各位朋友批评指正,谢谢。
package cal.test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CalTest extends JFrame implements ActionListener
{
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JTextField tf = null;
private JButton Backspace = null;
private JButton clear = null;
private JButton bt7 = null;
private JButton bt8 = null;
private JButton bt9 = null;
private JButton bt11 = null;
private JButton sqrt = null;
private JButton bt4 = null;
private JButton bt5 = null;
private JButton bt6 = null;
private JButton bt12 = null;
private JButton bt13 = null;
private JButton bt1 = null;
private JButton bt2 = null;
private JButton bt3 = null;
private JButton bt14 = null;
private JButton jButton = null;
private JButton bt15 = null;
private JButton bt0 = null;
private JButton bt16 = null;
private JButton bt17 = null;
private JButton bt18 = null;
private JButton bt19 = null;
boolean com=false;//用来判断是否点击过"+-*/"
boolean rs=false;//是否点击过'='
boolean qm=false;//取模
int flag=0;
int i=0;
String beforeNum=""; // @jve:decl-index=0:
String afterNum=""; // @jve:decl-index=0:
private JTextField getTf()
{
if (tf == null)
{
tf = new JTextField();
tf.setBounds(new Rectangle(5, 3, 283, 24));
}
return tf;
}
private JButton getBackspace() {
if (Backspace == null) {
Backspace = new JButton();
Backspace.setBounds(new Rectangle(35, 41, 80, 28));
Backspace.setText("C");
Backspace.setForeground(Color.RED);
Backspace.setFont(new Font("",Font.BOLD,15));
Backspace.addActionListener(this);
}
return Backspace;
}
private JButton getClear() {
if (clear == null) {
clear = new JButton();
clear.setBounds(new Rectangle(150, 41, 110, 28));
clear.setText("Backspace");
clear.setForeground(Color.RED);
clear.setFont(new Font("",Font.BOLD,15));
clear.addActionListener(this);
}
return clear;
}
private JButton getBt7() {
if (bt7 == null) {
bt7 = new JButton();
bt7.setBounds(new Rectangle(3, 83, 53, 30));
bt7.setText("7");
bt7.setForeground(Color.BLUE);
bt7.setFont(new Font("",Font.BOLD,15));
bt7.addActionListener(this);
}
return bt7;
}
private JButton getBt8() {
if (bt8 == null) {
bt8 = new JButton();
bt8.setBounds(new Rectangle(59, 83, 53, 30));
bt8.setText("8");
bt8.setForeground(Color.BLUE);
bt8.setFont(new Font("",Font.BOLD,15));
bt8.addActionListener(this);
}
return bt8;
}
private JButton getBt9() {
if (bt9 == null) {
bt9 = new JButton();
bt9.setBounds(new Rectangle(117, 83, 53, 30));
bt9.setText("9");
bt9.setForeground(Color.BLUE);
bt9.setFont(new Font("",Font.BOLD,15));
bt9.addActionListener(this);
}
return bt9;
}
private JButton getBt11() {
if (bt11 == null) {
bt11 = new JButton();
bt11.setBounds(new Rectangle(175, 83, 53, 30));
bt11.setText("/");
bt11.setForeground(Color.RED);
bt11.setFont(new Font("",Font.BOLD,15));
bt11.addActionListener(this);
}
return bt11;
}
private JButton getSqrt() {
if (sqrt == null) {
sqrt = new JButton();
sqrt.setBounds(new Rectangle(233, 83, 53, 30));
sqrt.setText("sqrt");
sqrt.setForeground(Color.BLUE);
sqrt.addActionListener(this);
//sqrt.setFont(new Font("",Font.BOLD,10));
}
return sqrt;
}
private JButton getBt4() {
if (bt4 == null) {
bt4 = new JButton();
bt4.setBounds(new Rectangle(3, 125, 53, 30));
bt4.setText("4");
bt4.setForeground(Color.BLUE);
bt4.setFont(new Font("",Font.BOLD,15));
bt4.addActionListener(this);
}
return bt4;
}
private JButton getBt5() {
if (bt5 == null) {
bt5 = new JButton();
bt5.setBounds(new Rectangle(59, 125, 53, 30));
bt5.setText("5");
bt5.setForeground(Color.BLUE);
bt5.setFont(new Font("",Font.BOLD,15));
bt5.addActionListener(this);
}
return bt5;
}
private JButton getBt6() {
if (bt6 == null) {
bt6 = new JButton();
bt6.setBounds(new Rectangle(117, 125, 53, 30));
bt6.setText("6");
bt6.setForeground(Color.BLUE);
bt6.setFont(new Font("",Font.BOLD,15));
bt6.addActionListener(this);
}
return bt6;
}
private JButton getBt12() {
if (bt12 == null) {
bt12 = new JButton();
bt12.setBounds(new Rectangle(175, 125, 53, 30));
bt12.setText("*");
bt12.setForeground(Color.RED);
bt12.setFont(new Font("",Font.BOLD,18));
bt12.addActionListener(this);
}
return bt12;
}
private JButton getBt13() {
if (bt13 == null) {
bt13 = new JButton();
bt13.setBounds(new Rectangle(233, 125, 53, 30));
bt13.setText("%");
bt13.setForeground(Color.BLUE);
bt13.setFont(new Font("",Font.BOLD,15));
bt13.addActionListener(this);
}
return bt13;
}
private JButton getBt1() {
if (bt1 == null) {
bt1 = new JButton();
bt1.setBounds(new Rectangle(3, 167, 53, 30));
bt1.setText("1");
bt1.setForeground(Color.BLUE);
bt1.setFont(new Font("",Font.BOLD,15));
bt1.addActionListener(this);
}
return bt1;
}
private JButton getBt2() {
if (bt2 == null) {
bt2 = new JButton();
bt2.setBounds(new Rectangle(59, 167, 53, 30));
bt2.setText("2");
bt2.setForeground(Color.BLUE);
bt2.setFont(new Font("",Font.BOLD,15));
bt2.addActionListener(this);
}
return bt2;
}
private JButton getBt3() {
if (bt3 == null) {
bt3 = new JButton();
bt3.setBounds(new Rectangle(117, 167, 53, 30));
bt3.setText("3");
bt3.setForeground(Color.BLUE);
bt3.setFont(new Font("",Font.BOLD,15));
bt3.addActionListener(this);
}
return bt3;
}
private JButton getBt14() {
if (bt14 == null) {
bt14 = new JButton();
bt14.setBounds(new Rectangle(175, 167, 53, 30));
bt14.setText("-");
bt14.setForeground(Color.RED);
bt14.setFont(new Font("",Font.BOLD,18));
bt14.addActionListener(this);
}
return bt14;
}
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle());
jButton.setText("1/x");
jButton.addActionListener(this);
}
return jButton;
}
private JButton getBt15() {
if (bt15 == null) {
bt15 = new JButton();
bt15.setBounds(new Rectangle(233, 167, 53, 30));
bt15.setText("1/x");
bt15.setForeground(Color.BLUE);
bt15.setFont(new Font("",Font.BOLD,15));
bt15.addActionListener(this);
}
return bt15;
}
private JButton getBt0() {
if (bt0 == null) {
bt0 = new JButton();
bt0.setBounds(new Rectangle(3, 209, 53, 30));
bt0.setText("0");
bt0.setForeground(Color.BLUE);
bt0.setFont(new Font("",Font.BOLD,15));
bt0.addActionListener(this);
}
return bt0;
}
private JButton getBt16() {
if (bt16 == null) {
bt16 = new JButton();
bt16.setBounds(new Rectangle(59, 209, 53, 30));
bt16.setText("+/-");
bt16.setForeground(Color.BLUE);
bt16.setFont(new Font("",Font.BOLD,15));
bt16.addActionListener(this);
}
return bt16;
}
private JButton getBt17() {
if (bt17 == null) {
bt17 = new JButton();
bt17.setBounds(new Rectangle(117, 209, 53, 30));
bt17.setText(".");
bt17.setForeground(Color.BLUE);
bt17.setFont(new Font("",Font.BOLD,18));
bt17.addActionListener(this);
}
return bt17;
}
private JButton getBt18() {
if (bt18 == null) {
bt18 = new JButton();
bt18.setBounds(new Rectangle(175, 209, 53, 30));
bt18.setText("+");
bt18.setForeground(Color.RED);
bt18.setFont(new Font("",Font.BOLD,15));
bt18.addActionListener(this);
}
return bt18;
}
private JButton getBt19() {
if (bt19 == null) {
bt19 = new JButton();
bt19.setBounds(new Rectangle(233, 209, 53, 30));
bt19.setText("=");
bt19.setForeground(Color.RED);
bt19.setFont(new Font("",Font.BOLD,15));
bt19.addActionListener(this);
}
return bt19;
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
CalTest thisClass = new CalTest();
thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
public CalTest()
{
super();
initialize();
this.setResizable(false);
}
private void initialize()
{
this.setSize(296, 284);
this.setContentPane(getJContentPane());
this.setTitle("计算器");
Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize=this.getSize();
if(frameSize.width>screenSize.width)
{
frameSize.width=screenSize.width;
}
if(frameSize.height>screenSize.height)
{
frameSize.height=screenSize.height;
}
this.setLocation((screenSize.width-frameSize.width)/5, (screenSize.width-frameSize.width)/5);
tf.setHorizontalAlignment(JTextField.RIGHT);//使数字从右边显示
tf.setEditable(false);
tf.setText("0.");
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getTf(), null);
jContentPane.add(getBackspace(), null);
jContentPane.add(getClear(), null);
jContentPane.add(getBt7(), null);
jContentPane.add(getBt8(), null);
jContentPane.add(getBt9(), null);
jContentPane.add(getBt11(), null);
jContentPane.add(getSqrt(), null);
jContentPane.add(getBt4(), null);
jContentPane.add(getBt5(), null);
jContentPane.add(getBt6(), null);
jContentPane.add(getBt12(), null);
jContentPane.add(getBt13(), null);
jContentPane.add(getBt1(), null);
jContentPane.add(getBt2(), null);
jContentPane.add(getBt3(), null);
jContentPane.add(getBt14(), null);
jContentPane.add(getJButton(), null);
jContentPane.add(getBt15(), null);
jContentPane.add(getBt0(), null);
jContentPane.add(getBt16(), null);
jContentPane.add(getBt17(), null);
jContentPane.add(getBt18(), null);
jContentPane.add(getBt19(), null);
}
return jContentPane;
}
public void actionPerformed(ActionEvent e)
{
//变量com为true点击过"+-*/",反之变量com为false没有点击过"+-*/"
//数字键1
if(e.getSource()==bt1)
{
if(com)
{
if(tf.getText().trim().equals("0."))
{
tf.setText("1");
com=false;
}
else
{
tf.setText(tf.getText().trim()+"1");
}
}
else
{
if(tf.getText().trim().equals("0."))
{
tf.setText("1");
}
else
{
tf.setText(tf.getText().trim()+"1");
}
}
}
//数字键2
else if(e.getSource()==bt2)
{
if(com==true)
{
tf.setText(tf.getText().trim()+"2");
}
else
{
if(tf.getText().trim().equals("0."))
{
tf.setText("2");
}
else
{
tf.setText(tf.getText().trim()+"2");
}
}
}
//数字键3
else if(e.getSource()==bt3)
{
if(com==true)
{
tf.setText(tf.getText().trim()+"3");
}
else
{
if(tf.getText().trim().equals("0."))
{
tf.setText("3");
}
else
{
tf.setText(tf.getText().trim()+"3");
}
}
}
//数字键4
else if(e.getSource()==bt4)
{
if(com)
{
tf.setText(tf.getText().trim()+"4");
}
else
{
if(tf.getText().trim().equals("0."))
{
tf.setText("3");
}
else
{
tf.setText(tf.getText().trim()+"4");
}
}
}
//数字键5
else if(e.getSource()==bt5)
{
if(com)
{
tf.setText(tf.getText().trim()+"5");
}
else
{
if(tf.getText().trim().equals("0."))
{
tf.setText("5");
}
else
{
tf.setText(tf.getText().trim()+"5");
}
}
}
//数字键6
else if(e.getSource()==bt6)
{
if(com)
{
tf.setText(tf.getText().trim()+"6");
}
else
{
if(tf.getText().trim().equals("0."))
{
tf.setText("6");
}
else
{
tf.setText(tf.getText().trim()+"6");
}
}
}
//数字键7
else if(e.getSource()==bt7)
{
if(com)
{
tf.setText(tf.getText().trim()+"7");
}
else
{
if(tf.getText().trim().equals("0."))
{
tf.setText("7");
}
else
{
tf.setText(tf.getText().trim()+"7");
}
}
}
//数字键8
else if(e.getSource()==bt8)
{
if(com)
{
tf.setText(tf.getText().trim()+"8");
}
else
{
if(tf.getText().trim().equals("0."))
{
tf.setText("8");
}
else
{
tf.setText(tf.getText().trim()+"8");
}
}
}
//数字键9
else if(e.getSource()==bt9)
{
if(com)
{
tf.setText(tf.getText().trim()+"9");
}
else
{
if(tf.getText().trim().equals("0."))
{
tf.setText("9");
}
else
{
tf.setText(tf.getText().trim()+"9");
}
}
}
//数字键0
else if(e.getSource()==bt0)
{
if(tf.getText().trim().equals("0."))
{}
else
{
tf.setText(tf.getText().trim()+"0");
}
}
//运算符+
else if(e.getSource()==bt18)
{
if(com==true)
{}
else
{
beforeNum=tf.getText().trim();
tf.setText(tf.getText().trim()+"+");
com=true;
flag=1;
}
}
//运算符-
else if(e.getSource()==bt14)
{
if(com==true)
{}
else
{
beforeNum=tf.getText().trim();
tf.setText(tf.getText().trim()+"-");
flag=2;
com=true;
}
}
//运算符*
else if(e.getSource()==bt12)
{
if(com==true)
{}
else
{
beforeNum=tf.getText().trim();
tf.setText(tf.getText().trim()+"*");
flag=3;
com=true;
}
}
//运算符/
else if(e.getSource()==bt11)
{
if(com==true)
{}
else
{
beforeNum=tf.getText().trim();
tf.setText(tf.getText().trim()+"/");
flag=4;
com=true;
}
}
//运算符%
else if(e.getSource()==bt13)
{
tf.setText(tf.getText().trim()+"%");
qm=true;
}
//运算符1/x
else if(e.getSource()==bt15)
{
if(com==false&&rs==false)
{
double d=Double.valueOf(tf.getText().trim());
tf.setText(String.valueOf(1/d));
}
}
//运算符sqrt
else if(e.getSource()==sqrt)
{
if(com==false&&rs==false)
{
double d=Double.valueOf(tf.getText().trim());
tf.setText(String.valueOf(Math.sqrt(d)));
}
}
//退格
else if(e.getSource()==clear)
{
if(tf.getText().trim().length()<1)
{
tf.setText("0.");
}
else
{
if(tf.getText().trim().equals("0."))
{
tf.setText("0.");
}
else
{
tf.setText(tf.getText().trim().substring(0, tf.getText().trim().length()-1));
}
if(tf.getText().trim().indexOf('=')==-1)
{
rs=false;
}
if(tf.getText().trim().indexOf('+')==-1)
{
com=false;
}
else
{
com=true;
}
if(tf.getText().trim().indexOf('-')==-1)
{
com=false;
}
else
{
com=true;
}
if(tf.getText().trim().indexOf('*')==-1)
{
com=false;
}
else
{
com=true;
}
if(tf.getText().trim().indexOf('/')==-1)
{
com=false;
}
else
{
com=true;
}
if(tf.getText().trim().indexOf('%')==-1)
{
qm=false;
}
else
{
qm=true;
}
}
}
else if(e.getSource()==Backspace)
{
//清除文本框中的全部内容
tf.setText("0.");
com=false;
rs=false;
qm=false;
}
//运算符+/-
else if(e.getSource()==bt16)
{
if(com==false&&rs==false&&qm==false)
{
String str=tf.getText().trim();
double d=Double.parseDouble(str);
if(d>0)
{
tf.setText(String.valueOf(-d));
}
else
{
tf.setText(String.valueOf(Math.abs(-d)));
}
}
}
//运算符"."
else if(e.getSource()==bt17)
{
//如果点击过"+-*/"
if(com==true)
{
int index=0;
if(flag==1)//点击'+'
{
index=tf.getText().trim().indexOf('+');
String str=tf.getText().trim().substring(index);
if(str.indexOf('.')==-1)
{
tf.setText(tf.getText().trim()+".");
}
}
else if(flag==2)//点击'-'
{
index=tf.getText().trim().indexOf('-');
String str=tf.getText().trim().substring(index);
if(str.indexOf('.')==-1)
{
tf.setText(tf.getText().trim()+".");
}
}
else if(flag==3)//点击'*'
{
index=tf.getText().trim().indexOf('*');
String str=tf.getText().trim().substring(index);
if(str.indexOf('.')==-1)
{
tf.setText(tf.getText().trim()+".");
}
}
else if(flag==4)//点击'/'
{
index=tf.getText().trim().indexOf('/');
String str=tf.getText().trim().substring(index);
if(str.indexOf('.')==-1)
{
tf.setText(tf.getText().trim()+".");
}
}
}
//如果没有点击过"+-*/"
else
{
if(tf.getText().trim().indexOf('.')==-1)
{
tf.setText(tf.getText().trim()+".");
}
}
}
//数字键'='
else if(e.getSource()==bt19)
{
//先判断取模键是否为true,如果为true,就进行取模运行;否则进行“+-*/”运算
if(qm==true)
{
if(com==false&&rs==false)
{
int index=tf.getText().trim().indexOf('%');
String beforeStr=tf.getText().trim().substring(0, index);
String afterStr=tf.getText().trim().substring(index+1);
if(afterStr.length()>0)
{
double d1=Double.valueOf(beforeStr);
double d2=Double.valueOf(afterStr);
tf.setText(tf.getText().trim()+"="+String.valueOf((int)(d1%d2)));
qm=false;
}
}
}
else
{
//先判断“=”键是否存在,假如不存在执行下列语句,否则下面的else语句。
if(rs==false)
{
Double result=0.0;
switch (flag)
{
case 1://点击'+'
{
int index=0;
index=tf.getText().trim().indexOf('+');
afterNum=tf.getText().trim().substring(index+1);
result=Double.valueOf(beforeNum)+Double.parseDouble(afterNum);
tf.setText(tf.getText().trim()+"="+result.toString());
break;
}
case 2://点击'-'
{
int index=0;
index=tf.getText().trim().indexOf('-');
afterNum=tf.getText().trim().substring(index+1);
result=Double.valueOf(beforeNum)-Double.parseDouble(afterNum);
tf.setText(tf.getText().trim()+"="+result.toString());
break;
}
case 3://点击'*'
{
int index=0;
index=tf.getText().trim().indexOf('*');
afterNum=tf.getText().trim().substring(index+1);
result=Double.valueOf(beforeNum)*Double.parseDouble(afterNum);
tf.setText(tf.getText().trim()+"="+result.toString());
break;
}
case 4://点击'/'
{
int index=0;
index=tf.getText().trim().indexOf('/');
afterNum=tf.getText().trim().substring(index+1);
if(Double.valueOf(afterNum)==0)
{
tf.setText("除数不能为零");
}
else
{
result=Double.valueOf(beforeNum)/Double.parseDouble(afterNum);
tf.setText(tf.getText().trim()+"="+result.toString());
}
break;
}
}
rs=true;
}
else
{
Double result=0.0;
switch (flag)
{
case 1://点击'+'
{
int index=0;
int x=0;
index=tf.getText().trim().indexOf('+');
x=tf.getText().trim().indexOf('=');
afterNum=tf.getText().trim().substring(index+1, x);
result=Double.valueOf(beforeNum)+Double.parseDouble(afterNum);
tf.setText(tf.getText().trim().substring(0,x+1)+result.toString());
break;
}
case 2://点击'-'
{
int index=0;
int x=0;
index=tf.getText().trim().indexOf('-');
x=tf.getText().trim().indexOf('=');
afterNum=tf.getText().trim().substring(index+1, x);
result=Double.valueOf(beforeNum)-Double.parseDouble(afterNum);
tf.setText(tf.getText().trim().substring(0,x+1)+result.toString());
break;
}
case 3://点击'*'
{
int index=0;
int x=0;
index=tf.getText().trim().indexOf('*');
x=tf.getText().trim().indexOf('=');
afterNum=tf.getText().trim().substring(index+1, x);
result=Double.valueOf(beforeNum)*Double.parseDouble(afterNum);
tf.setText(tf.getText().trim().substring(0,x+1)+result.toString());
break;
}
case 4://点击'/'
{
int index=0;
int x=0;
index=tf.getText().trim().indexOf('/');
x=tf.getText().trim().indexOf('=');
afterNum=tf.getText().trim().substring(index+1, x);
if(Double.valueOf(afterNum)==0)
{
tf.setText("除数不能为零");
}
else
{
result=Double.valueOf(beforeNum)/Double.parseDouble(afterNum);
tf.setText(tf.getText().trim().substring(0,x+1)+result.toString());
}
break;
}
}
}
}
}
}
} // @jve:decl-index=0:visual-constraint="220,8"