import javax.swing.*;
import java.awt.*;

public class AppCal extends JFrame {
    // AppCal클래스의 필드
    private JTextField printCalculation = new JTextField();// 수식을 화면에 보여주는 JTextField 컴포넌트
    private JButton [] calculationNumberButton = new JButton[10]; // 숫자에 해당하는 버튼들
    private JButton [] calculationButton = { new JButton("<-"), new JButton("계산"),
            new JButton("+"), new JButton("-"), new JButton("×"), new JButton("÷") };// 연산기호에 해당하는 버튼들
    private JTextField printResultCalculation = new JTextField();// 계산 결과를 출력하는 컴포넌트

    // AppCal클래스의 생성자
    public AppCal(){
        setTitle("계산기 프로그램");// 제목을 계산기 프로그램이라는 이름 설정하기
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 창닫기버튼 클릭시 프로그램 종료
        Container contentpane = getContentPane();// 콘텐트팬을 가져오기 => 여기서 gui프로그램을 만든다.
        contentpane.setLayout(new BorderLayout());// 레이아웃을 BorderLayout으로 설정한다.

        contentpane.add(new InputtedCalculation(), BorderLayout.NORTH);//북쪽에 계산식을 보여주는 패널을 부착한다.
        contentpane.add(new CalculationButton(), BorderLayout.CENTER);// 중앙에 계산기에 필요한 숫자들과 사칙연산기호등... 버튼들이 있는 패널을 부착한다.
        contentpane.add(new ResultOfCalculation(), BorderLayout.SOUTH);// 계산결과를 알려주는 패널을 부착한다.

        setSize(380,260);//프로그램 실행시 창을 가로360픽셀, 세로 260픽셀크기로 한다.
        setVisible(true);// 창을 화면에 보이도록 설정한다.
    }
    // AppCal클래스의 내부 클래스로 JPanel을 상속받아 InputtedCalculation 패널클래스구현(계산식(계산수식)을 보여준다.)
    private class InputtedCalculation extends JPanel{
        public InputtedCalculation(){
            setLayout(new GridLayout(1,2)); // 1행과 2렬로 구성된 grid배치관리자로 설정했다.
            setBackground(Color.LIGHT_GRAY);// 배경색을 LIGHT_GRAY로 설정했다.(밝은 회색)
            add(new JLabel("계산식"));// 라벨의 텍스트를 게산식으로 설정해서 부착했다.
            printCalculation.setEditable(false);// 사용자가 JTextField를 수정하지못하도록 설정했다.
            add(printCalculation); // JTextField를 부착했다.
        }
    }
    // AppCal클래스의 내부 클래스로 JPanel을 상속받아 CalculationButton 패널클래스구현(계산기의 버튼들을 만든다.)
    private class CalculationButton extends JPanel{
        public CalculationButton(){
            int i;
            setLayout(new GridLayout(4,4,3,3));// 4행과 4렬로 구성된 grid배치관리자로 설정했다.추가로 상하좌우 간격을 각각 3픽셀씩 간격을 두도록 했다.

            for (i = 0; i < calculationNumberButton.length; i++)// 0~9까지의 텍스트를 가지는 각각 버튼을 부착하는 반복문이다.(+나중에는 이벤트리스너를 구현해서 처리를 할 것 이다.)
            {
                calculationNumberButton[i] = new JButton(Integer.toString(i)); // 숫자는 반복되는데 텍스트를 넣어야하기에 숫자를 문자열로 바꿔 JButton의 인수에 넣었다.
                add(calculationNumberButton[i]);// 숫자에 해당하는 버튼 부착
                calculationNumberButton[i].addActionListener(null);// 아직 미완
            }
            for (i = 0; i < calculationButton.length; i++)// 연산기호에 해당하는 텍스트를 가지는 각각 버튼을 부착하는 반복문이다.(+나중에는 이벤트리스너를 구현해서 처리를 할 것 이다.)
            {
                add(calculationButton[i]);// 연산기호에 해당하는 버튼 부착
                calculationButton[i].addActionListener(null);// 아직 미완이며 따로따로 해줘야될듯 하다. 최대한 공통적으로 만들어보자
            }

        }
    }
    // AppCal클래스의 내부 클래스로 JPanel을 상속받아 ResultOfCalculation 패널클래스구현()
    private class ResultOfCalculation extends JPanel{
        public ResultOfCalculation(){
            setLayout(new GridLayout(1,2));// 1행과 2렬로 구성된 grid배치관리자로 설정했다.
            setBackground(Color.ORANGE);// 배경색을 ORANGE로 설정했다.(오렌지)
            add(new JLabel("계산결과"));// 라벨의 텍스트를 게산결과로 설정해서 부착했다.
            printResultCalculation.setEditable(false);// 사용자가 JTextField를 수정하지못하도록 설정했다.
            add(printResultCalculation);
        }
    }
    public static void main(String[] args) {
        new AppCal();
    }// 메인메소드에서 AppCal클래스 생성자를 실행시켰다.

java 실습으로 계산기GUI프로그램을 만들어보려합니다.

GUI전체적인틀을 구성하는 코드에 대해 설명을 보고 싶다면 주석을 참고해주시면 좋겠습니다.

혹시 코드 틀린부분이나 주석 설명 미흡 또는 잘못설명된게 있다면 댓글이나 개인톡 주시면 감사하겠습니다.

* 아직 완성단계가 아닙니다. 이후에 채워나가겠습니다. *

 

 

 

+ Recent posts