-
TIL #18 - 계산기 프로그램프로그래밍/TIL(국비과정) 2020. 4. 20. 20:05
# 계산기 프로그램
버튼작동이나 계산은 되지 않고 틀만 만들었다.
단, SWING은 적용하지 않았다..
import java.awt.Button; import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Label; import java.awt.Panel; class CalcAgain extends Frame{ private Label dispL, inputL; // 식이 보이는 라벨, 결과 라벨 private Button[] button; // 버튼 16개 private Button backBtn, clearBtn; // 위의 2개
label은 계산식이 보이는 라벨 하나와 결과가 나오는 라벨 하나로 각각 두개이다.
버튼은 맨 위의 back 버튼과 clear 버튼을 제외하고 4x4로 16개이다.
back/clear 버튼은 따로 뗴어 관리한다.
CalcAgain 생성자 안에 버튼과 버튼이 들어갈 panel 등을 선언해준다.
public CalcAgain(){ // 버튼 Button[] btn = new Button[16]; String[] str = new String[]{"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", ".", "0", "=", "+"}; // 버튼 text 값 배열로 저장 for(int i = 0; i < 16; i++){ btn[i] = new Button(); } for(int i = 0; i < str.length; i++){ btn[i] = new Button(str[i]); btn[i].setFont(new Font("Serif", Font.BOLD, 25)); // 버튼 폰트 스타일 } backBtn = new Button("←"); clearBtn = new Button("C"); backBtn.setFont(new Font("Serif", Font.BOLD, 25)); clearBtn.setFont(new Font("Serif", Font.BOLD, 25));
먼저 버튼에 대한 설정이다.
맨 위의 두 버튼을 제외하고 나머지 버튼을 배열로 관리한다.
먼저 버튼에 들어갈 문자열 배열을 따로 만들고,
이후에 new Button을 이용해서 버튼을 갯수에 맞게 생성해준다.
그런 후 문자열을 만든 버튼 안에 넣어 버튼을 만든다.
Button을 생성할 때는 반드시 new Button을 해주어야한다.
그렇지 않으면 nullPointException 에러가 발생한다.
버튼 폰트의 default 값의 가시성이 좋지 않아 폰트를 굵게하고 크기를 키웠다.
이후 frame에 대한 셋팅을 한다.
setTitle("미니 계산기"); setBounds(900, 200, 300, 400); setResizable(false);
차례로 frame의 타이틀, 위치 및 크기, frame 크기 변경 불가 로 셋팅했다.
위에서 우리는 두개의 라벨을 필드에 선언했다
하나는 계산식을 보여주는 dispL, 또 하나는 결과값을 보여주는 inputL 인데
이 둘도 new 를 통해 생성해준다.
// 두 입출력 라벨 // dispL dispL = new Label("", Label.RIGHT); dispL.setBackground(new Color(200, 191, 231)); // inputL inputL = new Label("0", Label.RIGHT); inputL.setBackground(new Color(200, 191, 231));
dispL에는 아무 글자도 뜨지 않게 했고
inputL에는 0이 뜨게 초기설정을 하였다.
그리고 둘다 RIGHT 오른쪽 정렬을 했고
라벨의 배경색을 설정했다.
Panel은 세로 한 줄을 기준으로 하나씩 만들고 각 버튼과 라벨들을 넣는다.
그럼 총 7개의 Panel이 필요하다.
그리고 추가적으로 7개의 Panel을 한꺼번에 넣어 관리할 전체 Panel도 만든다.
총 8개의 Panle이다.
Layout은 행 열로 정렬되는 GridLayout으로 설정한다.
// 계산 내용 패널 Panel p1 = new Panel(); // 첫번째 p1.setLayout(new GridLayout(1, 1, 5, 5)); p1.add(dispL); dispBuf = new StringBuffer(); // 계산 결과 패널 Panel p2 = new Panel(); // 두번째 p2.setLayout(new GridLayout(1, 0, 5, 5)); p2.add(inputL); inputBuf = new StringBuffer("0"); // 뒤로, c 패널 Panel p3 = new Panel(); // 세번째 p3.setLayout(new GridLayout(1, 2, 5, 5)); p3.add(backBtn); p3.add(clearBtn); //p3.add("Center", p3); Panel p4 = new Panel(); // 네번째 p4.setLayout(new GridLayout(1, 4, 5, 5)); p4.add(btn[0]); p4.add(btn[1]); p4.add(btn[2]); p4.add(btn[3]); //p4.add("South", p4); Panel p5 = new Panel(); // 다섯번째 p5.setLayout(new GridLayout(1, 4, 5, 5)); p5.add(btn[4]); p5.add(btn[5]); p5.add(btn[6]); p5.add(btn[7]); //p5.add("South", p5); Panel p6 = new Panel(); // 여섯번째 p6.setLayout(new GridLayout(1, 4, 5, 5)); p6.add(btn[8]); p6.add(btn[9]); p6.add(btn[10]); p6.add(btn[11]); //p6.add("South", p6); Panel p7 = new Panel(); // 일곱번째 p7.setLayout(new GridLayout(1, 4, 5, 5)); p7.add(btn[12]); p7.add(btn[13]); p7.add(btn[14]); p7.add(btn[15]); //p7.add("South", p7); // p에 모든 패널 추가 Panel p = new Panel(); // 전체패널 p.setLayout(new GridLayout(7, 4, 2, 5)); p.add(p1); p.add(p2); p.add(p3); p.add(p4); p.add(p5); p.add(p6); p.add(p7);
전체 Panel을 center로 위치시키면 그 안에 있는 Panel들도 center로 위치된다.
add("Center", p); // frame에 p 추가 setVisible(true);
frame 생성시 setVisible(true)를 해야 frame이 보인다.
public static void main(String[] args) { CalcAgain c = new CalcAgain(); } }
여기까지 하면 전체적인 계산기 틀을 만든 것이다.
'프로그래밍 > TIL(국비과정)' 카테고리의 다른 글
TIL #20 - Comparable, Exception, 스레드 (0) 2020.04.22 TIL #19 - 제네릭, Collection, ArrayList, Set, Map (0) 2020.04.21 TIL #18 - 중첩클래스, inner class , 익명클래스 (0) 2020.04.20 TIL #17 - 추상, enum, interface (0) 2020.04.18 TIL #16 - Final, instanceof, 추상 (0) 2020.04.16