Java - Layout을 활용한 계산기

2020. 7. 7. 23:08Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.Font;
import javax.swing.SwingConstants;
import java.awt.Color;
 
public class Test6 extends JFrame {
    JTextField tfLCD;
    JButton btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9;
    JButton btnAdd, btnSub, btnMul, btnDiv, btnC, btnCE, btnPoint, btnSign, btnDel, btnOk;
    
    JButton[] btns = {
            btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, 
            btnAdd, btnSub, btnMul, btnDiv, btnC, btnCE, btnPoint, btnSign, btnDel, btnOk};
    
    String[] btnTexts = {
            "CE""C""←""÷"
            "6""7""8""×"
            "4""5""6""-",
            "1""2""3""+"
            "±""0"".""="
    };
    
    public Test6() {
        showFrame();
    }
 
    public void showFrame() {
        setBounds(800400350400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        // ---------------------------------------------------
        // 상단 숫자 표시 패널
        JPanel pNorth = new JPanel();
        getContentPane().add(pNorth, BorderLayout.NORTH);
        
        // JTextField 컴포넌트를 사용하여 숫자 표시
        tfLCD = new JTextField(15);
        tfLCD.setText("0"); // 초기 표시 숫자 설정
        
        tfLCD.setHorizontalAlignment(JTextField.RIGHT); // 텍스트 정렬 설정(우측 정렬)
        tfLCD.setFont(new Font("굴림", Font.BOLD, 25)); // 폰트 설정
        tfLCD.setBackground(Color.WHITE); // 배경색 설정
        tfLCD.setEditable(false); // 편집 불가 설정
        tfLCD.addKeyListener(keyListener);
        
        pNorth.add(tfLCD);
        // ---------------------------------------------------
        // 중앙 계산기 버튼 패널
        JPanel pCenter = new JPanel(new GridLayout(54));
        getContentPane().add(pCenter, BorderLayout.CENTER);
 
//        // JButton 컴포넌트를 사용하여 계산기 버튼 생성 및 패널에 부착
//        btnCE = new JButton("CE"); 
//        btnCE.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btnCE);
//        btnC = new JButton("C"); 
//        btnC.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btnC);
//        btnDel = new JButton("←"); 
//        btnDel.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btnDel);
//        btnDiv = new JButton("÷"); 
//        btnDiv.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btnDiv);
//        btn7 = new JButton("7"); 
//        btn7.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btn7);
//        btn8 = new JButton("8"); 
//        btn8.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btn8);
//        btn9 = new JButton("9"); 
//        btn9.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btn9);
//        btnMul = new JButton("×"); 
//        btnMul.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btnMul);
//        btn4 = new JButton("4"); 
//        btn4.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btn4);
//        btn5 = new JButton("5"); 
//        btn5.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btn5);
//        btn6 = new JButton("6"); 
//        btn6.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btn6);
//        btnSub = new JButton("-"); 
//        btnSub.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btnSub);
//        btn1 = new JButton("1"); 
//        btn1.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btn1);
//        btn2 = new JButton("2"); 
//        btn2.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btn2);
//        btn3 = new JButton("3"); 
//        btn3.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btn3);
//        btnAdd = new JButton("+"); 
//        btnAdd.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btnAdd);
//        btnSign = new JButton("±"); 
//        btnSign.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btnSign);
//        btn0 = new JButton("0"); 
//        btn0.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btn0);
//        btnPoint = new JButton("."); 
//        btnPoint.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btnPoint);
//        btnOk = new JButton("="); 
//        btnOk.setFont(new Font("굴림", Font.BOLD, 22));
//        pCenter.add(btnOk);
        
        //배열을 사용하여 동일한 형태의 객체에 동일한 작업을 반복 수행하는 방법
        //for 문을 사용하여 배열 크기만큼 반복
        for(int i=0;i<btns.length;i++) {
            btns[i] =new JButton(btnTexts[i]);//버튼객체 생성
            btns[i].setFont(new Font("굴림",Font.BOLD,22));//버튼 폰트 변경
            pCenter.add(btns[i]);
            btns[i].addActionListener(listener);
        }
        
        
        // ---------------------------------------------------
 
        setVisible(true);
        
    }
    
    //버튼 클릭 동작 리스너 4단계 구현
    ActionListener listener=new ActionListener() {
        
        @Override
        public void actionPerformed(ActionEvent e) {
//            System.out.println(e.getActionCommand());
            tfLCD.setText(e.getActionCommand());
        }
    };
    
    KeyAdapter keyListener=new KeyAdapter() {
 
        @Override
        public void keyPressed(KeyEvent e) {
            System.out.println(e.getKeyCode());
        }
        
    }; 
    
 
    public static void main(String[] args) {
        new Test6();
    }
 
}
 
 
 
cs

 

완성은 아직 시키진 않았지만 계산기처럼 JButton이 많이 들어가고 JButton을 또 add()시키려면 주석 처리된 문장들처럼 엄청 길어지는데 일정한 순서를 임의로 부여해서 배열로 처리를 하게 되면 for문 하나로 간단하게 몇십 줄의 문장을 줄일 수 있다. 생각을 좀 더 유연하게 할 수 있게 한 발짝 멀리서 생각하는 습관을 가져야겠다.