*기본 계산기앱은 블로그는 (3)이 끝입니다.

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

public class AppCal extends JFrame {
    // AppCal클래스의 필드
    private JTextArea printInputtedCalculation = new JTextArea();// 수식을 화면에 보여주는 JTextField 컴포넌트
    private JButton [] calculationNumberButton = new JButton[10]; // 숫자에 해당하는 버튼들
    private JButton [] calculationButton = {
            new JButton("<-(All)"), 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 ResultOfCalculation(), BorderLayout.SOUTH);// 계산결과를 알려주는 패널을 부착한다.
        contentpane.add(new CalculationButton(), BorderLayout.CENTER);// 중앙에 계산기에 필요한 숫자들과 사칙연산기호등... 버튼들이 있는 패널을 부착한다.
        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("계산식"));// 라벨의 텍스트를 게산식으로 설정해서 부착했다.
            printInputtedCalculation.setEditable(false);// 사용자가 JTextField를 수정하지못하도록 설정했다.
            add((printInputtedCalculation)); // JTextArea를 부착했다.
        }
    }
    // 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(new calculatorButtonActionListener(false));// 아직 미완
            }
            for (i = 0; i < calculationButton.length; i++)// 연산기호에 해당하는 텍스트를 가지는 각각 버튼을 부착하는 반복문이다.(+나중에는 이벤트리스너를 구현해서 처리를 할 것 이다.)
            {
                add(calculationButton[i]);// 연산기호에 해당하는 버튼 부착
                if (i>=2)
                    calculationButton[i].addActionListener(new calculatorButtonActionListener(true));// 사칙연산기호에 해당 이벤트 리스너를 적용했다.
            }
            calculationButton[0].addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent actionEvent) {
                    JButton button = (JButton)actionEvent.getSource();
                    printInputtedCalculation.setText("");
                }
            });
            calculationButton[1].addActionListener(new calculatorActionListener());

        }
        private class calculatorButtonActionListener implements ActionListener{
            private boolean operationalSymbols;
            public calculatorButtonActionListener(boolean operationalSymbols){
                this.operationalSymbols = operationalSymbols;
            }
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                // 이벤트가 발생하면 해당버튼 숫자를 불러와 printInputtedCalculation에 출력한다.
                // 우선 해당버튼 객체를 불러온다. 그 객체 문자를 가져와 printInputtedCalculation에 출력
                JButton button = (JButton)actionEvent.getSource();
                if (operationalSymbols)
                    printInputtedCalculation.append(" " + button.getText() + " ");
                else
                    printInputtedCalculation.append(button.getText());
            }
        }
        private class calculatorActionListener implements ActionListener{
            private String [] calculationElements = printInputtedCalculation.getText().split(" ");
            private ArrayList<String> calculationElements1 = new ArrayList<String>();
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                // 계산버튼
                // 먼저 문자열 전체부분을 가져온다. 그래서 공백기준으로 쪼개서 넣는다.
                // 반복문 for 안에서 ~~
                // 홀수부분이 연산자, 짝수부분이 피연산자 개수를 파악할 수 있다. size()로 개수도 파악가능하고 인덱스도 파악가능하다. => 이걸 반복문에서 자체로 걸려서 인덱스로 대입을 할지 contain을 해서 안에서 할지
                //
            }
        }
    }
    // 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클래스 생성자를 실행시켰다.
}

이벤트처리부분과 사칙연산을 고려해서 넣는게 쉽진않네요..

+ Recent posts