처음에만든 코드

    package Calculator;
    
    import javax.swing.JPanel;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    import java.awt.GridLayout;
    import java.awt.Font;
    import java.awt.Font;
    import java.awt.Color;
    import java.awt.BorderLayout;
    
    
    public class Carculator extends JFrame implements ActionListener {
    JLabel label;           // 연산 결과창
    boolean state = false; // 화면에 표시된 number 핸들러
    double num1, num2; 
    double result;         // 연산 결과
    String func = "";     // 기능 연산자
    String nInput = "";   // 마지막에 누른 연산자 저장
    
    String btn1[] = { "Backspace", "clear", "End" }; //3개 값배열
    String btn2[] = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", ".", "=", "/" };// 버튼 안에 값 배열
    
    
    public Carculator() {
    
        super("계산기"); 
        super.setResizable(true); 
    
        // 결과 창 GUI
        label = new JLabel("0", JLabel.RIGHT);
        label.setFont(new Font("궁서체", Font.BOLD, 50));
    
        // 버튼 창 GUI
        JPanel btnView1 = new JPanel();
        JPanel btnView2 = new JPanel();
        
        btnView1.setLayout(new GridLayout(1, 0, 0, 0));
        btnView2.setLayout(new GridLayout(4, 4, 2, 2)); // 행과 열로 구성된 레이아웃 설정 (row, cols, 간격, 간격)
        
        JButton button1[] = new JButton[btn1.length];
        JButton button2[] = new JButton[btn2.length]; // 버튼 생성, 배열의 길이만큼 값을 가져옴
        
        for (int i = 0; i < btn1.length; i++) {
            button1[i] = new JButton(btn1[i]);
            button1[i].addActionListener(this); // 익명클래스로 버튼 이벤트 추가 ,이벤트 리스너의 객체이므로 this로 지정
            label.setFont(new Font("궁서체", Font.BOLD, 50));
            btnView1.add(button1[i]);
    
        }
        
        for (int i = 0; i < btn2.length; i++) {
            button2[i] = new JButton(btn2[i]);
            button2[i].addActionListener(this); // 익명클래스로 버튼 이벤트 추가 ,이벤트 리스너의 객체이므로 this로 지정
            label.setFont(new Font("궁서체", Font.BOLD, 50));
            btnView2.add(button2[i]);
    
        }
    
        // 프레임 배치 및 설정
        add(label, BorderLayout.NORTH); // 결과창 
        add(btnView1, BorderLayout.CENTER); // 버튼창 
        add(btnView2, BorderLayout.SOUTH); // 버튼창 
    
        setBounds(100, 100, 300, 400); 
        setSize(280,350);
        setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
        setVisible(true); 
    
    }
    
    // 마우스 클릭에 의한 동작
    /*
        boolean state = false; // 화면에 표시된 number 핸들러
    	double num1, num2; 
    	double result;         // 연산 결과
    	String func = "";      // 기능 연산자
    	String nInput = "";    // 마지막에 누른 연산자 저장
     */
    @Override
    public void actionPerformed(ActionEvent e) {
    
        String input = e.getActionCommand(); // 이벤트를 발생시킨 객체의 문자열을 가져와서 input에 넣음
    
        if (input.equals("+")) {
            num1 = num2;  
            func = "+";
            nInput = ""; 
    
        } else if (input.equals("-")) {
            num1 = num2;
            func = "-";
            nInput = "";
    
        } else if (input.equals("*")) {
            num1 = num2;
            func = "*";
            nInput = "";
    
        } else if (input.equals("/")) {
            num1 = num2;
            func = "/";
            nInput = "";
    
        } else if (input.equals("clear")) {  // Clear
            nInput = "";
            num2 = 0;
            num1 = 0;
            label.setText("0");
                                             
        } else if (input.equals("Backspace")) {     // 오른쪽부터 지워짐
            setBackSpace(getBackSpace().substring(0, getBackSpace().length() - 1));
            if (getBackSpace().length() < 1) {  // 더 이상 지울 숫자가 없으면, 0으로 clear
                nInput = "";
                num2 = 0;
                num1 = 0;
                label.setText("0");
            }
    
        } else if (input.equals("=")) {
            if (func.equals("+")) {
                result = num1 + num2;
                label.setText(String.valueOf(result)); //결과값을 문자열로 반환하여 결과창에 출력
                state = true; // 결과 값이 나온 후 다음 입력이 들어왔을 때 화면에 표시된 결과 값을 지운다.
    
            } else if (func.equals("-")) {
                result = num1 - num2;
                label.setText(String.valueOf(result));
                state = true;
    
            } else if (func.equals("*")) {
                result = num1 * num2;
                label.setText(String.valueOf(result));
                state = true;
    
            } else if (func.equals("/")) {
                result = num1 / num2;
                label.setText(String.valueOf(result));
                state = true;
    
            }
    
        } else {
            if (state) {
                label.setText("0");
                state = false;
                num1 = 0;
                num2 = 0;
                nInput = "";
            }
    
            nInput += e.getActionCommand();
            label.setText(nInput);
            num2 = Double.parseDouble(nInput); //문자열에서 double형 변
    
        }
    
    }
    
    	private void setBackSpace(String bs) {
    	    label.setText(bs);
    	}
    	
    	private String getBackSpace() {
    	    return label.getText();
    	}
    	
    	public static void main(String[] args) {
    	    new Carculator();
    	}
    }
    
    	

    뼈대부터 잘못만든거같아서 다시 강의 듣고만들어봄

     

    package Calculator;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Font;
    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.JPanel;
    import javax.swing.JTextField;
    //								패널을 상속받아 이 자체가 패널이 된다.
    public class Calculator2 extends JPanel implements ActionListener{
    	Font fnt = new Font("Arial", Font.BOLD, 20);
    	
    	//JFrame - North
    	JTextField resultTf = new JTextField("0.0");
    	//JFrame - Center
    	JPanel centerPane = new JPanel(new BorderLayout()); //디폴트 레이아웃 : Flow  
    	JPanel northPane = new JPanel(new GridLayout(1,3));
    	JPanel btnPane = new JPanel(new GridLayout(4,4));
    	
    	String btnLbl[] = {"BackSpace","Clear","End",
    						"7","8","9","+",
    						"4","5","6","-",
    						"1","2","3","*",
    						"0",".","=","/"};
    	//연산자보관할 변수
    	String operator = "";
    	//피연산자 보관
    	double result = 0.0;
    	
    	public Calculator2() {
    		setLayout(new BorderLayout());
    		//JFrame - North
    		add("North", resultTf);
    		resultTf.setFont(fnt);
    		//내용을 오른쪽 정렬
    		resultTf.setHorizontalAlignment(JTextField.RIGHT);
    		
    		//JFrame - Center
    		centerPane.add("North", northPane);
    		centerPane.add(BorderLayout.CENTER, btnPane);
    		add("Center", centerPane);
    		
    		//버튼 생성
    		for(int i=0; i<btnLbl.length; i++) {
    			JButton btn = new JButton(btnLbl[i]);
    			btn.setFont(fnt); //글꼴, 유형, 크기 세팅
    			if(i<=2) {
    				northPane.add(btn);
    			}else {
    				btnPane.add(btn);
    				btn.setBackground(Color.LIGHT_GRAY);
    			}
    			//이벤트 등록
    			btn.addActionListener(this);
    		}
    		
    	}
    	//오버라이딩
    	public void actionPerformed(ActionEvent ae) {
    		String eventBtn = ae.getActionCommand();
    		switch(eventBtn) {
    			case "End": System.exit(0); break;
    			case "0": case "1": case "2": case "3": case "4": case "5":
    			case "6": case "7": case "8": case "9":
    				setNumber(eventBtn);
    				break;
    			case ".":
    				setPoint();
    				break;
    			case "BackSpace":
    				setBackSpace();
    				break;
    			case "+": case "-": case "*": case "/":
    				setOperator(eventBtn);
    				break;
    			case "=":
    				setResult();
    				break;
    			case "Clear":
    				setClear();
    				break;
    		}
    	}
    	//데이터 초기화
    	public void setClear() {
    		result = 0.0;
    		operator = "";
    		resultTf.setText("0.0");
    	}
    	//연산하기
    	public void setResult() {
    		double secondNum = Double.parseDouble(resultTf.getText());
    		switch(operator) {
    			case "+": result = result + secondNum; break;
    			case "-": result -= secondNum; break;
    			case "*": result *= secondNum; break;
    			case "/": result /= secondNum; break;
    		}
    		resultTf.setText(String.valueOf(result)); // double형을 String으로 변환
    		operator = "";
    	}
    	//연산자 버튼 선택시(+, -, *, /)
    	public void setOperator(String operator) {
    		//연산자 보관
    		this.operator = operator;
    		result = Double.parseDouble(resultTf.getText()); //숫자보관
    		resultTf.setText("");
    	}
    	//BackSpace처리
    	public void setBackSpace() {
    		String lblStr = resultTf.getText(); //123468
    		String cutStr = lblStr.substring(0, lblStr.length()-1);  //12346을 구한다.
    		resultTf.setText(cutStr);
    	}
    	//소수점 처리
    	public void setPoint() {
    		String lblstr = resultTf.getText();
    		int idx = lblstr.indexOf("."); // .위치 구하기
    		if(idx == -1) {
    			resultTf.setText(lblstr+".");
    		}
    	}
    	//숫자버튼을 선택하면
    	public void setNumber(String num) {
    		//JTextField 원래값 얻어오기
    		String lblstr = resultTf.getText(); // 0.0
    		if(lblstr.equals("0.0")) {
    			resultTf.setText(num); // 클릭한 숫자버튼을 셋팅
    		}else {
    			resultTf.setText(lblstr+num);
    		}
    	}
    }
    

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기