Untitled
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()); } }