Java 一個簡單計算器

代碼:

import javax.swing.*;
import java.awt.*;

//創建一個計算器實例,並進行測試

public class CalculatorPanelTest {
    public static void main(String[] args)
    {
        EventQueue.invokeLater(() -> {
            CalculatorFrame frame = new CalculatorFrame();
            frame.setTitle("Calculator");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        });
    }
}
import javax.swing.*;

//創建一個框架
    public class CalculatorFrame extends JFrame
    {
        public CalculatorFrame()
        {
            add(new CalculatorPanel());
            setLocation(200,200);
            pack();
        }
    }
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//計算器面板,計算器的主要類

public class CalculatorPanel extends JPanel {
    private JButton display; //計算器顯示
    private JPanel panel;  //計算器數字和運算符按鈕
    private double result; //儲存計算結果
    private String lastCommand;  //上一次輸入的運算符
    private boolean start;  // 是否爲開始 或 清空
    private boolean flag;  // 是否更新運算符

    public CalculatorPanel() {
        setLayout(new BorderLayout()); //總體面板

		//初始變量
        flag = false;
        result = 0;
        panel = new JPanel();
        lastCommand = "=";
        start = true;
        display = new JButton("0");
		
		//添加計算器顯示,並佈局在北方(上方)
        add(display, BorderLayout.NORTH);
        display.setEnabled(false);

		//設置按鈕面板佈局
        panel.setLayout(new GridLayout(4,4));
        
		//創建 數字 和 運算符 兩種事件監聽器
        ActionListener insert  = new InsertAction();
        ActionListener command = new CommandAction();
        
		//爲按鈕面板添加具體按鈕,並綁定事件
        addButton("7", insert);
        addButton("8", insert);
        addButton("9", insert);
        addButton("/", command);

        addButton("4", insert);
        addButton("5", insert);
        addButton("6", insert);
        addButton("*", command);

        addButton("1", insert);
        addButton("2", insert);
        addButton("3", insert);
        addButton("-", command);

        addButton("0", insert);
        addButton(".", insert);
        addButton("=", command);
        addButton("+", command);
		
		//添加按鈕面板,並佈局在中間位置
        add(panel,BorderLayout.CENTER);
    }

	//添加按鈕,並綁定事件監聽器
    private void addButton(String s, ActionListener l){
        JButton jButton = new JButton(s);
        jButton.addActionListener(l);
        panel.add(jButton);
    }

	//創建 數字(insert)類的事件監聽器
    private class InsertAction implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            String input = e.getActionCommand();
            if(start){
                display.setText("");
                start = false;
            }
            display.setText(display.getActionCommand()+input);
            flag = false;
        }
    }

	//創建 運算符 (command)類的事件監聽器
    private class CommandAction implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            String command = e.getActionCommand();
            if(flag && command.equals(lastCommand)) return;//多次點擊同一運算符只執行一次
            if(flag){
            	// 多次點擊不同運算符,對運算符進行更新
                lastCommand = command;
                return;
            }
            String num = display.getActionCommand();
            if(num == "") num="0";
            calculate(Double.parseDouble(num));
            lastCommand = command;
            start = true;
            flag = true;
        }
    }
    
	//計算器進行計算,並計算器將結果顯示
    public void calculate(double x){
        if(lastCommand.equals("=")){result = x;flag=false;}
        else if(lastCommand.equals("+"))result +=x;
        else if(lastCommand.equals("-"))result -=x;
        else if(lastCommand.equals("*"))result *=x;
        else if(lastCommand.equals("/"))result /=x;
        display.setText(""+result);
    }
	//設置面板的大小
    @Override
    public Dimension getPreferredSize(){
        return new Dimension(300,200);
    }
}

效果圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章