계산기 만들기
소스코드
public class JavaExam {
public static void main(String[] args) {
new P02_Button();
}
}
class P02_Button{ // JFrame을 상속받지 않은 예제
JLabel label;
JButton[] button;
public P02_Button() {
run();
}
private void run() {
JFrame frame = new JFrame();
JPanel panel_t = new JPanel();
JPanel panel_c = new JPanel();
label = new JLabel();
label.setFont(new Font("굴림", Font.BOLD, 15));
panel_t.setPreferredSize(new Dimension(frame.getWidth(),50));
panel_t.add(label);
panel_c.setLayout(new GridLayout(4, 4));
button = new JButton[16];
String[] titles = {"7","8","9","+",
"4","5","6","-",
"1","2","3","*",
"undo","0","=","/"};
// 버튼 컴포넌트를 생성
for(int i=0; i<titles.length; i++) {
button[i] = new JButton(titles[i]);
button[i].setPreferredSize(new Dimension(100,30));
button[i].addActionListener(new MyButtonClickListener());
//버튼 글자크기 수정
button[i].setFont(new Font("굴림", Font.BOLD, 15));
panel_c.add(button[i]);
}
// 패널을 프레임에 붙이기
frame.setLayout(new BorderLayout());
frame.add(panel_t, BorderLayout.NORTH);
frame.add(panel_c, BorderLayout.CENTER);
//기본 창 꾸미기
frame.setTitle("예제2-버튼");
frame.setBounds(100, 100, 330, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//커스텀 리스너 생성으로 버튼 공동 작업
private class MyButtonClickListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// Object객체로 입력받아 객체비교
Object src=e.getSource();
if(src == button[12]) { //clear버튼
label.setText("");
}
else if(src == button[14]) { // 계산(=)버튼
calcString(label.getText()); // 메소드를 사용하여 연산
}
else { // 나머지는 숫자값 및 연산식
JButton btn = (JButton)e.getSource();
String str = label.getText() + btn.getText();
label.setText(str);
}
// JOptionPane.showMessageDialog(null, btn.getText());
}
//연산 메소드
private void calcString(String str) {
String[] op = {"+","-","*","/"};
String[] nums = new String[2];
String op_ch="";
for(int i=0; i<op.length;i++) {
if(str.indexOf(op[i])>-1) { // 못찾으면 -1
op_ch = op[i];
}
}
switch (op_ch) {
case "+":
// split("+")가 동작하지 않아 "\\+"사용
nums = str.split("\\+");
label.setText(String.valueOf(
Integer.parseInt(nums[0])+Integer.parseInt(nums[1])));
break;
case "-":
nums = str.split("\\-");
label.setText(String.valueOf(
Integer.parseInt(nums[0])-Integer.parseInt(nums[1])));
break;
case "*":
nums = str.split("\\*");
label.setText(String.valueOf(
Integer.parseInt(nums[0])*Integer.parseInt(nums[1])));
break;
case "/":
nums = str.split("/");
//0으로 나누는 예외처리
if(Integer.parseInt(nums[1])==0) {
JOptionPane.showMessageDialog(null, "0으로 나눌수 없습니다.");
label.setText("");
}
else {
label.setText(String.valueOf(
Integer.parseInt(nums[0])/Integer.parseInt(nums[1])));
}
break;
}
}
}
}
레이아웃 : BorderLayout 사용
public class JavaExam {
public static void main(String[] args) {
new P03_Border();
}
}
class P03_Border{
public P03_Border() {
run();
}
private void run() {
JFrame frame = new JFrame();
JPanel panel_t = new JPanel();
JPanel panel_c = new JPanel();
frame.setLayout(new BorderLayout());
JLabel label = new JLabel("North", JLabel.CENTER);
label.setFont(new Font("Courier", Font.BOLD, 36));
//경계선 표시
panel_t.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
panel_t.add(label);
label = new JLabel("Center", JLabel.CENTER);
label.setFont(new Font("Courier", Font.BOLD, 36));
//경계선 표시
panel_c.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
panel_c.add(label);
frame.add(panel_t, BorderLayout.NORTH);
frame.add(panel_c, BorderLayout.CENTER);
//기본 창 꾸미기
frame.setTitle("예제2-버튼");
frame.setBounds(100, 100, 400, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
'PROGRAM > JAVA-SWING' 카테고리의 다른 글
KeyEvent (0) | 2022.09.20 |
---|---|
Thread 2 (0) | 2022.09.19 |
Thread (0) | 2022.09.15 |
#02 - 버튼 생성하기(JPanel / JButton / JLabel) (0) | 2022.09.07 |
#01 - 시작하기(JFrame) (0) | 2022.09.07 |