본문 바로가기
JAVA

[JAVA] JFrame을 이용한 계산기 만들기 (소스 코드)

by 알기 쉬운 코딩 사전 2023. 8. 3.
반응형

 

package test;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class test extends JFrame implements ActionListener{
	JPanel p1;
	JLabel lb = new JLabel("0", JLabel.RIGHT);;
	String btn[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ".", "C", "+", "-", "*", "/"};
	JButton Btns[] = new JButton[btn.length];
	JButton eBtn  = new JButton("=");
	int num_st = 1;
	int op = 0;
	double d1, d2, d3;
	
	public test() {
		// TODO Auto-generated constructor stub
		setTitle("계산기");
		setLayout(new BorderLayout());
		

		p1 = new JPanel();
		p1.setLayout(new GridLayout(4,4));
		
		
		for(int i = 0; i < btn.length; i++) {
			Btns[i] = new JButton(btn[i]);
			Btns[i].addActionListener(this);
			p1.add(Btns[i]);
		}
		eBtn.addActionListener(this);
		
		
		add("North", lb);
		add("Center", p1);
		add("South", eBtn);
		
		setTitle("계산기");
		setVisible(true);
		setSize(200,210);
		//화면의 가운데에 띄움
		setLocationRelativeTo(null); 
		//사이즈조절 불가능
		setResizable(false);
		//창을 닫을 때 실행 중인 프로그램도 같이 종료되도록 함
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String s = lb.getText();
		
		for(int i = 0; i < 10; i++) {
            if(e.getSource() == Btns[i]) {               
                  if(Btns[i] == Btns[9]) {
                     if(num_st > 0) {
                        num_st = 1;
                        lb.setText("0");
                     }
                     else {
                        lb.setText(s+"0");
                     }
                  }
                  else {
                     if(num_st > 0) {
                        num_st = 0;
                        lb.setText(String.valueOf(i+1));
                     }
                     else {
                        lb.setText(s + String.valueOf(i+1));
                     }
                  }
               }
            }

		
		if (e.getSource() == Btns[10]) {
			if(num_st>0) {
				num_st=0;
				lb.setText(s+".");
			}else
				lb.setText(s+".");
		}
		if (e.getSource() == Btns[11]) {
			lb.setText("0");
			num_st = 1;
			op = 0;
		}
		
		if (e.getSource() == Btns[12]) {
			num_st = 1;
			op = 1;
			d1 = Double.parseDouble(lb.getText());
		}
		if (e.getSource() == Btns[13]) {
			num_st = 1;
			op = 2;
			d1 = Double.parseDouble(lb.getText());
		}
		if (e.getSource() == Btns[14]) {
			num_st = 1;
			op = 3;
			d1 = Double.parseDouble(lb.getText());
		}
		if (e.getSource() == Btns[15]) {
			num_st = 1;
			op = 4;
			d1 = Double.parseDouble(lb.getText());
		}
		if (e.getSource() == eBtn) {
			num_st = 1;
			
			d2 = Double.parseDouble(lb.getText());
			
			if(op == 1)
				d3 = d1 + d2;
			else if (op == 2)
				d3 = d1 - d2;
			else if (op == 3)
				d3 = d1 * d2;
			else if (op == 4)
				d3 = d1 / d2;
			
			lb.setText(""+d3);
			
		}
			
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new test();
	}

}

실행 결과 화면

 

 

반응형

댓글