SimpleJavaSwingCalculator

package corejavaI.layout;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CalculatorTest {

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        JPanel panel = new CalculatorPanel();
        frame.add(panel);
        frame.setTitle("SimpleJavaSwingCalculator");
        frame.setSize(300, 300);
        frame.setLocation(200, 100);
        frame.setVisible(true);
    }

}
class CalculatorPanel extends JPanel{
    
    private JButton display;
    private JPanel panel;
    private double result;
    private String lastCommand;
    private boolean start;
    
    public CalculatorPanel(){
        setLayout(new BorderLayout());
        result = 0;
        lastCommand = "=";
        start = true;
        display = new JButton("0");
        display.setEnabled(false);
        add(display, BorderLayout.NORTH);
        
        ActionListener insert = new InsertAction();
        ActionListener command = new CommandAction();
        ActionListener resetCommand = new ResetAction();
        
        panel = new JPanel();
        panel.setLayout(new GridLayout(5, 4));
    
        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);
        
        addButton("重置", resetCommand);
    
        add(panel, BorderLayout.CENTER);
    }
    
    private void addButton(String label, ActionListener listener){
        JButton button = new JButton(label);
        button.addActionListener(listener);
        panel.add(button);
    }
    
    private class InsertAction implements ActionListener{

        public void actionPerformed(ActionEvent e) {
            String input = e.getActionCommand();
            if(start){
                display.setText("");
                start = false;
            }
            display.setText(display.getText() + input);
        }
        
    }
    
    private class CommandAction implements ActionListener{

        public void actionPerformed(ActionEvent e) {
            String command = e.getActionCommand();
            if(start){
                if(command.equals("-")){
                    display.setText(command);
                    start = false;
                }else{
                    lastCommand = command;
                }
            }else{
                calculate(Double.parseDouble(display.getText()));
                lastCommand = command;
                start = true;
            }
        }
        
    }
    
    private class ResetAction implements ActionListener{

        public void actionPerformed(ActionEvent e) {
            display.setText("0");
        }
        
    }
    
    public void calculate(double x){
        if(lastCommand.equals("+"))
            result += x;
        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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值