计算器的实现

import  java.applet. * ;
import  java.awt. * ;
import  java.awt.event. * ;
import  java.lang. * ;
import  java.applet.Applet;
import  javax.swing. * ;
import  javax.swing.border. * ;

public   class  Calculator  extends  JApplet  implements  ActionListener  {
    
private final String[] KEYS = "7""8""9""/""sqrt""4""5""6",
            
"*""%""1""2""3""-""1/x""0""+/-"".""+""=" }
;
    
private final String[] COMMAND = "Backspace""CE""C" };
    
private final String[] M = " ""MC""MR""MS""M+" };
    
private JButton keys[] = new JButton[KEYS.length];
    
private JButton commands[] = new JButton[COMMAND.length];
    
private JButton m[] = new JButton[M.length];
    
private JTextField display = new JTextField("0");

    
// public JTextField setHorizontalAlignment(int alignment);
    
// private JTextField display.setHorizontalAlignment(JTextField.RIGHT)=new
    
// JTextField("0");
    private void setup() {
        display.setHorizontalAlignment(JTextField.RIGHT);
        JPanel calckeys 
= new JPanel();
        JPanel command 
= new JPanel();
        JPanel calms 
= new JPanel();
        calckeys.setLayout(
new GridLayout(4533));
        command.setLayout(
new GridLayout(1333));
        calms.setLayout(
new GridLayout(5133));
        
for (int i = 0; i < KEYS.length; i++{
            keys[i] 
= new JButton(KEYS[i]);
            calckeys.add(keys[i]);
            keys[i].setForeground(Color.blue);
        }

        keys[
3].setForeground(Color.red);
        keys[
4].setForeground(Color.red);
        keys[
8].setForeground(Color.red);
        keys[
9].setForeground(Color.red);
        keys[
13].setForeground(Color.red);
        keys[
14].setForeground(Color.red);
        keys[
18].setForeground(Color.red);
        keys[
19].setForeground(Color.red);
        
for (int i = 0; i < COMMAND.length; i++{
            commands[i] 
= new JButton(COMMAND[i]);
            command.add(commands[i]);
            commands[i].setForeground(Color.red);
        }

        
for (int i = 0; i < M.length; i++{
            m[i] 
= new JButton(M[i]);
            calms.add(m[i]);
            m[i].setForeground(Color.red);
        }

        JPanel panel1 
= new JPanel();
        panel1.setLayout(
new BorderLayout(33));
        panel1.add(
"North", command);
        panel1.add(
"Center", calckeys);
        JPanel top 
= new JPanel();
        top.setLayout(
new BorderLayout());
        display.setBackground(Color.WHITE);
        top.add(
"Center", display);
        getContentPane().setLayout(
new BorderLayout(35));
        getContentPane().add(
"North", top);
        getContentPane().add(
"Center", panel1);
        getContentPane().add(
"West", calms);
    }


    
public void init() {
        setup();
        
for (int i = 0; i < KEYS.length; i++{
            keys[i].addActionListener(
this);
        }

        
for (int i = 0; i < COMMAND.length; i++{
            commands[i].addActionListener(
this);
        }

        
for (int i = 0; i < M.length; i++{
            m[i].addActionListener(
this);
        }

        display.setEditable(
false);
    }


    
public void actionPerformed(ActionEvent e) {
        String label 
= e.getActionCommand();
        
// double zero=e.getActionCommand();
        if (label == "C")
            handleC();
        
else if (label == "Backspace")
            handleBackspace();
        
else if (label == "CE")
            display.setText(
"0");
        
else if ("0123456789.".indexOf(label) >= 0{
            handleNumber(label);
            
// handlezero(zero);
        }
 else
            handleOperator(label);
    }


    
private boolean firstDigit = true;

    
private void handleNumber(String key) {
        
if (firstDigit)
            display.setText(key);
        
else if ((key.equals(".")) && (display.getText().indexOf("."< 0))
            display.setText(display.getText() 
+ ".");
        
else if (!key.equals("."))
            display.setText(display.getText() 
+ key);
        firstDigit 
= false;
    }


    
// private void handlezero(String key)
    
// {
    
// if(!((double)display.setText(key))
    
// display.setText(0);
    
// }
    private double number = 0.0;
    
private String operator = "=";

    
private void handleOperator(String key) {
        
if (operator.equals("/")) {
            
if (getNumberFromDisplay() == 0.0)
                display.setText(
"除数不能为零");
            
else {
                number 
/= getNumberFromDisplay();
                
long t1;
                
double t2;
                t1 
= (long) number;
                t2 
= number - t1;
                
if (t2 == 0)
                    display.setText(String.valueOf(t1));
                
else
                    display.setText(String.valueOf(number));
            }

        }
 else if (operator.equals("1/x")) {
            
if (number == 0.0)
                display.setText(
"零没有倒数");
            
else {
                number 
= 1 / number;
                
long t1;
                
double t2;
                t1 
= (long) number;
                t2 
= number - t1;
                
if (t2 == 0)
                    display.setText(String.valueOf(t1));
                
else
                    display.setText(String.valueOf(number));
            }

        }
 else if (operator.equals("+"))
            number 
+= getNumberFromDisplay();
        
else if (operator.equals("-"))
            number 
-= getNumberFromDisplay();
        
else if (operator.equals("*"))
            number 
*= getNumberFromDisplay();
        
else if (operator.equals("sqrt")) {
            number 
= Math.sqrt(number);
        }
 else if (operator.equals("%"))
            number 
= number / 100;
        
else if (operator.equals("+/-"))
            number 
= number * (-1);
        
else if (operator.equals("="))
            number 
= getNumberFromDisplay();
        
long t1;
        
double t2;
        t1 
= (long) number;
        t2 
= number - t1;
        
if (t2 == 0)
            display.setText(String.valueOf(t1));
        
else
            display.setText(String.valueOf(number));
        operator 
= key;
        firstDigit 
= true;
    }


    
private double getNumberFromDisplay() {
        
return Double.valueOf(display.getText()).doubleValue();
    }


    
private void handleC() {
        display.setText(
"0");
        firstDigit 
= true;
        operator 
= "=";
    }


    
private void handleBackspace() {
        String text 
= display.getText();
        
int i = text.length();
        
if (i > 0{
            text 
= text.substring(0, i - 1);
            
if (text.length() == 0{
                display.setText(
"0");
                firstDigit 
= true;
                operator 
= "=";
            }
 else
                display.setText(text);
        }

    }


    
public static void main(String args[]) {
        JFrame f 
= new JFrame();
        Calculator Calculator1 
= new Calculator();
        Calculator1.init();
        f.getContentPane().add(
"Center", Calculator1);
        f.setVisible(
true);
        f.setBounds(
300200380245);
        f.setBackground(Color.LIGHT_GRAY);
        f.validate();
        f.setResizable(
false);
        f.addWindowListener(
new WindowAdapter() {
            
public void windowClosing(WindowEvent e) {
                System.exit(
0);
            }

        }
);
        f.setTitle(
"计算器");
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值