import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.util.stream.Stream;

public class Dentaku extends JFrame implements ActionListener{
    public static void main(String[] args) {
        new Dentaku();
    }

    JTextField result = new JTextField("");

    JPanel buttonarea = new JPanel(new GridLayout(4,4));
    ArrayList<JButton> buttons = new ArrayList<JButton>();
    JButton tasuButton = new JButton("+");
    JButton hikuButton = new JButton("-");
    JButton kakeButton = new JButton("×");
    JButton wariButton = new JButton("÷");
    JButton equalButton = new JButton("=");
    JButton clearButton = new JButton("C");

    int beforeNum = 0;
    Integer dispNum = null;
    String op = "";

    JButton  button7,button8,button9,buttonwaru,button4,button5,button6,buttonkake;
    JButton button1,button2,button3,buttonhiku,buttonclear,button0,buttontasu,buttonequal;

    Dentaku(){
        String[] keys = {
            "7","8","9","÷",
            "4","5","6","×",
            "1","2","3","-",
            "C","0","+","="
        };

        Stream.of(keys).forEach(x -> {
            JButton button = new JButton(x);
            button.addActionListener(this);
            buttonarea.add(button);
            buttons.add(button);
        });

        //コンテナに追加
        add(result);
        add(buttonarea);
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(280, 320);
        setVisible(true);
        setResizable(false);
        setLayout(new GridLayout(2,1));
        result.setFont(new Font("Arial", Font.PLAIN, 40));
        result.setHorizontalAlignment(JTextField.RIGHT);
    }

    @Override
    public void actionPerformed(ActionEvent e){
        //選択されたボタンごとに処理をする
        JButton selectedButton = (JButton)e.getSource();

        try{
        //数値ボタンが選択された場合
            if(buttons.contains(selectedButton)){
                if(dispNum == null){
                    dispNum = Integer.valueOf(selectedButton.getText());
                }
                else{
                    dispNum = Integer.valueOf(String.valueOf(dispNum) + selectedButton.getText());
                }
                result.setText(String.valueOf(dispNum));
            }
        }
        catch(NumberFormatException ex){
            //"+"が選択された場合
            if((selectedButton.getText()).equals("+")){
                op = "+";
                result.setText(String.valueOf(dispNum));
                beforeNum = dispNum;
                dispNum = 0;
            }
            //"-"が選択された場合
            else if((selectedButton.getText()).equals("-")){
                op = "-";
                result.setText(String.valueOf(dispNum));
                beforeNum = dispNum;
                dispNum = 0;
            }
            //"×"が選択された場合
            else if((selectedButton.getText()).equals("×")){
                op = "×";
                result.setText(String.valueOf(dispNum));
                beforeNum = dispNum;
                dispNum = 0;
            }
            //"÷"が選択された場合
            else if((selectedButton.getText()).equals("÷")){
                op = "÷";
                result.setText(String.valueOf(dispNum));
                beforeNum = dispNum;
                dispNum = 0;
            }
            //"="が選択された場合
            else if((selectedButton.getText()).equals("=")){
                if(op.equals("+")){
                    dispNum = dispNum + beforeNum;
                    result.setText((String.valueOf(dispNum)));
                    beforeNum = dispNum;
                    dispNum = 0;
                    op = "";    //演算子クリア
                }
                else if(op.equals("-")){
                    dispNum = beforeNum - dispNum;
                    result.setText((String.valueOf(dispNum)));
                    beforeNum = dispNum;
                    dispNum = 0;
                    op = "";
                }
                else if(op.equals("×")){
                    dispNum = dispNum * beforeNum;
                    result.setText((String.valueOf(dispNum)));
                    beforeNum = dispNum;
                    dispNum = 0;
                    op = "";
                }
                else if(op.equals("÷")){
                    dispNum = beforeNum / dispNum;
                    result.setText((String.valueOf(dispNum)));
                    beforeNum = dispNum;
                    dispNum = 0;
                    op = "";
                }
            }
            if((selectedButton.getText()).equals("C")){
                dispNum = 0;
                beforeNum = 0;
                op = "";
                result.setText("");
            }
        }
    }
}
