본문 바로가기

혼자해보는 공부

java계산기 사칙연산까지 해본 후 ..

728x90


사칙연산까지 풀이하며 알게된 것.

상속과 선언은 중요했다.

public class Calculator extends JFrame

클래스를 선언하면서 JFrame를 사용한다는 상속문을 사용했다.
물론 선언도 해야한다. ctrl+shift+O . 이런거 없으면 진짜 힘들었을거같다.


window의 선언은 거의다 set명령어로 이루어져 있다.
Title - 제목
Visible - 창을 화면에 나타내거나 안나타내도록 설정한다. (true가 나타냄)
Size - 사이즈를 설정한다. ( wighe , height)
LocationRelativeTo - 창을 한가운데에 배치한다 (null)
Resizeable - 창의 사이즈를 설정할 수 없도록 만든다 (false)
DefaultCloseOperation(JFrame.EXIT_ON_CLOSE) - 창을 닫을때 실행중인 프로그램도 함께 종료시킨다.

텍스트창을 만들땐 조금 달랐다.

inputSpace = new JTextField(); // inputSpace에는 GUI로 텍스트를 입력받는 JTextField로 구현
inputSpace.setEditable(false); // 수정이 불가능하도록 만듬
inputSpace.setBackground(Color.white); // 배경색을 지정
inputSpace.setHorizontalAlignment(JTextField.RIGHT); //  오른쪽으로 정렬한다.
inputSpace.setFont(new Font("Arial", Font.BOLD, 50)); // 폰트 Arial로 두껍게, 50사이즈로 지정
inputSpace.setBounds(8,10,270,70); // x : 8 y : 10 의 위치에 270x70의 크기로 설정

총크기 300 370에서 위쪽화면에 가로로 270 세로로70인 텍스트창을 만드는과정이 생각보다 간단해보였다.

buttonPanel.setLayout(new GridLayout(4,4,10,10)); // 칸수, 세로 칸수, 좌우간격, 상하간격을 입력 4행 4열로 총 16칸을 만들었다.
buttonPanel.setBounds(8, 90, 270, 235); //가로위치,세로위치,가로길이,세로길이

버튼 판넬이 적은게 적은데 버튼이 생각보다 이쁘게 잘나왔다.

setBackground(Color.GRAY)
setForeground(Color.white)
setBorderPainted(false)
버튼의 배경색,폰트색,테두리없애기 명렁어. 폰트가아니라 ForeGround..


addActionListener(new PadActionListener()) 버튼을 사용할땐 addActionListener를 선언 및 상속시켜주어야 한다.
class PadActionListener implements ActionListener 꼭.. 상속

마지막으로 값을 계산할때 사칙연산과 숫자를 함께넣은 배열을 사용했기에 문자배열을 사용헀는데 계산이 가능하도록 Double.parseDouble(s) 로 변수를 정수형으로 변환해서 넣어주는걸 생각도 못해서 한참 해맸다...

아 ... 계산에서 String s에서도 한참 멈췄지...  String mode만 선언했는데 s변수가 어디있는지를 못찾아서
같은 클레스안에선 그안에서만 사용할꺼고 함수가 하나니까 String s로 for문에 넣어도 괜찮다더라 ...




계산기의 흐름

1. 실행시 프레임을 불러옴
add(inputSpace) 
add(buttonPanel)
JFrame로 만들어두었던 계산기 텍스트판넬과 버튼을 모두 호출함
이까지 하고 동작 정지

2. 버튼을 누를시 해당 버튼값을 텍스트판넬에 넣어줌 (ActionListener) 버튼액션 실행
( 이게 길어질 수록 For문을 계속 돌림 숫자나 사칙연산이 입력된만큼 계속 돌아가며 하나씩 추가입력됌 ) 나한테 보이게 ~

3. = 입력시 calculate 가 호출되며 2번에서 했던 fullTextPasing을 호출해서 텍스트판넬에 있는 값을 모두 받아옴(String)

4.  그리고 fullTextPasing에서 사용했던 equation 배열을 비교하며 직접 선언한 String mode에 넣으면서 비교를 시작함.

5. 숫자일시 prev = current 그냥 넣어주도록 하고 사칙연산일시 += -= 등 값을 계산해서 넣어준다.

6. return prev로 계산된값을 돌려준다. 

7. 액션목록에     String result = Double.toString(calculate(inputSpace.getText())); // 숫자값을 해당하는 문자열 표현으로 변환한 후 삽입해주며 계산이 끝난다.


이까지 이해했으니 이제 다음으로 갈껀데 아쉬운건 지금 ++++만 입력하면 에러나고 그래서 .... 그런 것도 수정하고싶다.

728x90
댓글