First Java Swing calculator – простой калькулятор на Java

      Комментарии к записи First Java Swing calculator – простой калькулятор на Java отключены

Главная Форумы Программирование Учебник по Java Решение задач на языке Java First Java Swing calculator – простой калькулятор на Java

Помечено: , , ,

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 1 месяц назад.

  • Автор
    Сообщения
  • #4119

    Java Swing calculator

    1) Главный класс в котором запускаем JFrame

    public class MainApp 
    {
    public static void main(String[] args)
    {
    new JFrameApp();
    }
    }

    2) Класс JFrameApp наследуем от JFame. Создаем окно нашего приложения, указываем его размеры (setBounds(100, 100, 265, 400)), добавляем в него стандартные кнопки (свернуть, закрыть, развернуть на весь экран, setDefaultCloseOperation(EXIT_ON_CLOSE)) , а также панель JPanelApp на которой мы будем размещать все наши кнопки. С помощью setVisible(true) говорим что нужно показать окно нашего приложения.

    import javax.swing.JFrame;
    public class JFrameApp extends JFrame 
    {
    public JFrameApp() 
    {
    setBounds(100, 100, 265, 400);
    setTitle("Calculator");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    add( new JPanelApp());
    setVisible(true);
    }
    }

    3) На панель JPanelApp мы располагаем все наши элементы калькулятора (кнопки, текстовое поле) и интерфейс слушателя на каждую кнопку калькулятора.

    import java.awt.Font;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    public class JPanelApp extends JPanel 
    {
    JTextField txt1 = null;
    int res = 0;
    int res1 = 0;
    String op = "";
    public JPanelApp()
    {
    try
    {
    setLayout(null);
    // Specifies the position of the element
    final TextField txt1 = new TextField();
    txt1.setBounds(10, 10, 235, 25); 
    JButton b0 = new JButton("0");
    b0.setBounds(10, 270, 75, 50);
    JButton b1 = new JButton("1");
    b1.setBounds(10, 190, 50, 50);
    JButton b2 = new JButton("2");
    b2.setBounds(60, 190, 50, 50);
    JButton b3 = new JButton("3");
    b3.setBounds(110, 190, 50, 50);
    JButton b4 = new JButton("4");
    b4.setBounds(10, 110, 50, 50);
    JButton b5 = new JButton("5");
    b5.setBounds(60, 110, 50, 50);
    JButton b6 = new JButton("6");
    b6.setBounds(110, 110, 50, 50);
    JButton b7 = new JButton("7");
    b7.setBounds(10, 40, 50, 50);
    JButton b8 = new JButton("8");
    b8.setBounds(60, 40, 50, 50);
    JButton b9 = new JButton("9");
    b9.setBounds(110, 40, 50, 50);
    JButton bRes = new JButton("=");
    bRes.setBounds(85, 270, 75, 50);
    Font bigFont = new Font("serif", Font.BOLD, 22);
    bRes.setFont(bigFont);
    JButton bPlus = new JButton("+");
    bPlus.setBounds(170, 40, 75, 50);
    Font bigFontPlus = new Font("serif", Font.BOLD, 22);
    bPlus.setFont(bigFontPlus);
    JButton bMinus = new JButton("-");
    bMinus.setBounds(170, 110, 75, 50);
    Font bigFontMinus = new Font("serif", Font.BOLD, 22);
    bMinus.setFont(bigFontMinus);
    JButton bMulti = new JButton("*");
    bMulti.setBounds(170, 190, 75, 50);
    Font bigFontMulti = new Font("serif", Font.BOLD, 22);
    bMulti.setFont(bigFontMulti);
    JButton bDivision = new JButton("/");
    bDivision.setBounds(170, 270, 75, 50);
    Font bigFontDivision = new Font("serif", Font.BOLD, 22);
    bDivision.setFont(bigFontDivision);
    add(txt1);
    add(b0);
    add(b1);
    add(b2);
    add(b3);
    add(b4);
    add(b5);
    add(b6);
    add(b7);
    add(b8);
    add(b9);
    add(bRes);
    add(bPlus);
    add(bMinus);
    add(bMulti);
    add(bDivision);
    b1.addActionListener(new ActionListener() 
    {
    @Override
    public void actionPerformed(ActionEvent arg1) 
    {
    txt1.setText(txt1.getText() + 1);
    if (res==0) {
    res = Integer.valueOf(txt1.getText());
    } else {
    res1 = Integer.valueOf(txt1.getText());
    }
    }
    });
    b2.addActionListener(new ActionListener() 
    {
    @Override
    public void actionPerformed(ActionEvent arg1) 
    {
    txt1.setText(txt1.getText() + 2);
    if (res==0) {
    res = Integer.valueOf(txt1.getText());
    } else {
    res1 = Integer.valueOf(txt1.getText());
    }
    }
    });
    b3.addActionListener(new ActionListener()
    {
    @Override
    public void actionPerformed(ActionEvent arg1) 
    {
    txt1.setText(txt1.getText() + 3);
    if (res==0) {
    res = Integer.valueOf(txt1.getText());
    } else {
    res1 = Integer.valueOf(txt1.getText());
    }
    }
    });
    b4.addActionListener(new ActionListener() 
    {
    @Override
    public void actionPerformed(ActionEvent arg1)
    {
    txt1.setText(txt1.getText() + 4);
    if (res==0)
    {
    res = Integer.valueOf(txt1.getText());
    } else {
    res1 = Integer.valueOf(txt1.getText());
    }
    }
    });
    b5.addActionListener(new ActionListener() 
    {
    @Override
    public void actionPerformed(ActionEvent arg1) 
    {
    txt1.setText(txt1.getText() + 5);
    if (res==0) {
    res = Integer.valueOf(txt1.getText());
    } else {
    res1 = Integer.valueOf(txt1.getText());
    }
    }
    });
    b6.addActionListener(new ActionListener() 
    {
    @Override
    public void actionPerformed(ActionEvent arg1) 
    {
    txt1.setText(txt1.getText() + 6);
    if (res==0) {
    res = Integer.valueOf(txt1.getText());
    } else {
    res1 = Integer.valueOf(txt1.getText());
    }
    }
    });
    b7.addActionListener(new ActionListener() 
    {
    @Override
    public void actionPerformed(ActionEvent arg1)
    {
    txt1.setText(txt1.getText() + 7);
    if (res==0) {
    res = Integer.valueOf(txt1.getText());
    } else {
    res1 = Integer.valueOf(txt1.getText());
    }
    }
    });
    b8.addActionListener(new ActionListener()
    {
    @Override
    public void actionPerformed(ActionEvent arg1) 
    {
    txt1.setText(txt1.getText() + 8);
    if (res==0) {
    res = Integer.valueOf(txt1.getText());
    } else {
    res1 = Integer.valueOf(txt1.getText());
    }
    }
    });
    b9.addActionListener(new ActionListener()
    {
    @Override
    public void actionPerformed(ActionEvent arg1)
    {
    txt1.setText(txt1.getText() + 9);
    if (res==0) {
    res = Integer.valueOf(txt1.getText());
    } else {
    res1 = Integer.valueOf(txt1.getText());
    }
    }
    });
    b0.addActionListener(new ActionListener()
    {
    @Override
    public void actionPerformed(ActionEvent arg1) 
    {
    txt1.setText(txt1.getText() + 0);
    if (res==0) {
    res = Integer.valueOf(txt1.getText());
    } else {
    res1 = Integer.valueOf(txt1.getText());
    }
    }
    });
    bPlus.addActionListener(new ActionListener() 
    {
    @Override
    public void actionPerformed(ActionEvent arg1) 
    {
    res = Integer.valueOf(txt1.getText());
    txt1.setText("");
    op = "+";
    }
    });
    bMinus.addActionListener(new ActionListener() 
    {
    @Override
    public void actionPerformed(ActionEvent arg1) 
    {
    res = Integer.valueOf(txt1.getText());
    txt1.setText("");
    op = "-";
    }
    });
    bMulti.addActionListener(new ActionListener()
    {
    @Override
    public void actionPerformed(ActionEvent arg1) 
    {
    res = Integer.valueOf(txt1.getText());
    txt1.setText("");
    op = "*";
    }
    });
    bDivision.addActionListener(new ActionListener() 
    {
    @Override
    public void actionPerformed(ActionEvent arg1) 
    {
    res = Integer.valueOf(txt1.getText());
    txt1.setText("");
    op = "/";
    }
    });
    bRes.addActionListener(new ActionListener()
    {
    @Override
    public void actionPerformed(ActionEvent arg0) 
    {
    int num = Integer.valueOf(res);
    int num1 = Integer.valueOf(res1);
    String strOp = op;
    MetodCalc mc = new MetodCalc();
    String strRes = String.valueOf(mc.calc(num, strOp, num1 ));
    txt1.setText(strRes);
    }
    });
    }
    catch (ArithmeticException exception)
    {
    //System.out.println("Can not divide by zero ");
    }
    }
    }

    4) Класс MetodCalc. В нем мы реализовываем метод, который будет выполнять действия над числами в зависимости от знака операции.

    public class MetodCalc 
    {
    public int calc ( int n1, String op, int n2) 
    {
    int res = 0;
    switch (op) 
    {
    case "+":
    res = n1+n2;
    break;
    case "-":
    res = n1-n2;
    break;
    case "*":
    res = n1*n2;
    break;
    case "/":
    res = n1/n2;
    break;
    default:
    res = 0;
    break;
    }
    return res;
    }
    }

    5) JUnit тесты для методов +, -, *, / класса MetodCalc:

    import static org.junit.Assert.assertEquals;
    public class Tests_Calculator
    {
    //testing main functions +, - , *, /
    @org.junit.Test
    public void testPlus()
    {
    MetodCalc mc = new MetodCalc();
    int res= mc.calc(15, "+", 5);
    assertEquals(20, res);
    }
    @org.junit.Test
    public void test_Minus()
    {
    MetodCalc mc = new MetodCalc();
    int res=mc.calc(15, "-", 5);
    assertEquals(10, res);
    }
    @org.junit.Test
    public void test_Multiply()
    {
    MetodCalc mc = new MetodCalc();
    int res=mc.calc(15, "*", 5);
    assertEquals(75, res );
    }
    @org.junit.Test
    public void test_Divide()
    {
    MetodCalc mc = new MetodCalc();
    int res=mc.calc(15, "/", 5);
    assertEquals(3, res );
    } 
    ///////////////division by zero//////////////////////
    @org.junit.Test (expected = ArithmeticException.class)
    public void test_Divide_zero()
    {
    MetodCalc mc = new MetodCalc();
    mc.calc(15, "/", 0); 
    } 
    }

Для ответа в этой теме необходимо авторизоваться.