package com.swing;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calculation extends JFrame implements ActionListener{

 JButton button1, button2, button3;
 JTextField text1, text2, text3;
 JComboBox combo;
 int num1, num2, res;
 String t1, t2, com;

 public Calculation(){
  super("계산 프로그램");
  //getContentPane()는 JFrame에있는것
  Container contentPane=getContentPane();
  //프래임의 contentPane 객체를 얻어옴
  JPanel pane1 = new JPanel(); //판넬로 묶어줌
  JPanel pane2 = new JPanel();

  pane1.setLayout(new FlowLayout()); //한줄로 정렬
  text1 =new JTextField(5);  //5 =  int columns
  text2 =new JTextField(5);
  text3 =new JTextField(5);

  String[] op = {"+","-","*","/"};
  combo = new JComboBox(op);
  //판넬1에 텍스트필드 콤보박스 등록
  pane1.add(text1);   
  pane1.add(combo);
  pane1.add(text2);
  pane1.add(new JLabel("="));
  pane1.add(text3);

  //합계가  보여지는 textfield에 입력불가
  text3.setEditable(false);

  button1 = new JButton("확인");
  button2 = new JButton("취소");
  button3 = new JButton("종료");
  
  //판넬에 버튼등록
  pane2.add(button1);  
  pane2.add(button2);
  pane2.add(button3);
  
  //컨테이너에 판넬 등록
  contentPane.add(pane1, BorderLayout.NORTH);  
  contentPane.add(pane2, BorderLayout.CENTER);

  //X 버튼 종료 처리
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
  button1.addActionListener(this);
  button2.addActionListener(this);
  button3.addActionListener(this);

  setLocation(500,400);

  //pack() :사이즈를 명시하지 않을 경우 컴퍼넌트의 크기를 인식 자동으로 Window 사이즈 변경
  pack();

  setVisible(true);  
 }

 public static void main(String[] args){
  JFrame.setDefaultLookAndFeelDecorated(true);
  new Calculation();
 }

 public void actionPerformed(ActionEvent e){
  //getSource() : 이벤트가 발생한 객체를 반환
  Object obj=e.getSource();
  if(obj == button1){
   //getText().trim() :  공백은 제거해서 String 으로 받음
   t1 = text1.getText().trim();
   t2 = text2.getText().trim();
   //getSelectedItem() : 선택한 값을 가져옴
   com = (String)combo.getSelectedItem();

   doCalc();
  }
  else if(obj == button2){
   text1.setText("");
   text2.setText("");
   text3.setText("");
  }
  else if(obj == button3){
   dispose();
   System.exit(0);
  }//end if (obj == button1)
 }
 private void doCalc(){

  //String t1 => int num1
  //String t2 => int num2
  //String com => char com.charAt(0) => switch문
  //switch문을 이용해서 결과를 int res에 넣기
  //text3.setText(res+"")  // String Valuesof
  num1 = Integer.parseInt(t1);
  num2 = Integer.parseInt(t2);

  if(com.equals("/") && num2 ==0){
   showErrMsg(text2,"0으로 나눌 수 없습니다.");
  }else{
   switch(com.charAt(0)){   //switch 시작을 알리는 중괄호를 반드시 적어주어야함
   case '+' : res = num1 + num2 ;break;    
   case '-' : res = num1 - num2 ;break; 
   case '*' : res = num1 * num2 ;break; 
   case '/' : res = num1 / num2 ;break; 
   }
  }
  text3.setText(res+"");
 }
 
//전달되는 데이터가 숫자면 true 숫자가 아니면 false
 private boolean isDigit(String value){
   return true;
 }

 private void showErrMsg(JTextField txt, String str){
  txt.requestFocus();
  txt.setText("");
  text3.setText(""); //에러 발생시 합계를 초기화 
  JOptionPane.showMessageDialog(this, str,"에러 메시지",JOptionPane.ERROR_MESSAGE);
  //부모 컴포넌트 , 메세지,메세지 타이틀, 메세지 타입

 }
}


'Java > Swing' 카테고리의 다른 글

예비  (0) 2012.04.13
swing을 이용한 계산기 ( 오류체크 try catch 로 바꿔보기)  (0) 2012.04.13

+ Recent posts