Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
4.0 kB
4
Indexable
Never
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.math.BigDecimal;

public class GuiCalculator {
    public static void main(String[] args){ // главный метод main
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
               // run нашего основного окна
                CalculatorFrame frame = new CalculatorFrame(); //другое
                frame.setVisible(true); // видимость экрана
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // выход из приложения при нажатии на крестик
            }
        });
    }
}

class CalculatorFrame extends JFrame{ // класс, унаследованный от JFrame
    public CalculatorFrame(){ // конструктор
        setTitle("Калькулятор");
        CalculatorPanel panel = new CalculatorPanel();
        add(panel); // this.add(panel);
        pack();
    }
}


class CalculatorPanel extends JPanel{
    //заводим поля
    private JButton display;
    private JPanel panel;
    private BigDecimal result;
    private String lastCommand;
    private boolean start; //принимает 0 или 1

    public CalculatorPanel(){
        setLayout(new BorderLayout()); // так расставляется сетка


        //здесь установили значения при создании
        result = BigDecimal.ZERO;
        lastCommand = "=";
        start = true;
        display = new JButton("0");
        display.setEnabled(false);
        display.setFont(display.getFont().deriveFont(50f)); //  шрифт
        ActionListener insert = new InsertAction();
        ActionListener command = new CommandAction();
        add(display, BorderLayout.NORTH);

        panel = new JPanel();
        panel.setLayout(new GridLayout(4,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);

        add(panel, BorderLayout.CENTER);


    }

    private void addButton(String label, ActionListener listener) {
        JButton button = new JButton(label);
        button.setFont(button.getFont().deriveFont(20f));
        button.addActionListener(listener);
        panel.add(button);
    }
    private class InsertAction implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            String input = event.getActionCommand();
            if (start) {
                display.setText("");
                start = false;
            }
            display.setText(display.getText() + input);
        }
    }
    private class CommandAction implements ActionListener {
        public void actionPerformed(ActionEvent event) {
            String command = event.getActionCommand();
            if (start) {
                lastCommand = command;
            } else {
                calculate(new BigDecimal(display.getText()));
                lastCommand = command;
                start = true;
            }
        }
    }
    public void calculate(BigDecimal x) {
        if (lastCommand.equals("+")) result = result.add(x);
        else if (lastCommand.equals("-")) result = result.subtract(x);
        else if (lastCommand.equals("*")) result = result.multiply(x);
        else if (lastCommand.equals("/")) result = result.divide(x);
        else if (lastCommand.equals("=")) result = x;
        display.setText(result.toString());
    }
}