Java/Swing
Swing 으로 계산기
Bohemian life
2012. 4. 13. 22:20
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); //부모 컴포넌트 , 메세지,메세지 타이틀, 메세지 타입 } }