Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 예외처리
- 어노테이션
- 이클립스
- 국제화
- 배열
- Java
- Android
- Eclips
- JSP
- 생성자
- 오버로딩
- struts2
- 메소드
- OGNL
- 안드로이드
- 메서드
- Spring
- HTML
- paint
- Graphic
- AWT
- layout
- 전화걸기
- 에러페이지
- mybatis
- oracle
- JavaScript
- 클래스
- 기본
- Menu
Archives
- Today
- Total
note
Swing 으로 계산기 본문
package com.swing;//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; JTextField text1,text2,text3; JComboBox combo; int num1 ,num2,res; String t1,t2,com; public Calculation(){ super("==계 산 기=="); Container contentPane = getContentPane(); //프레임의 contentPane 객체를 얻어옴 JPanel pane1 = new JPanel(); JPanel pane2 = new JPanel(); pane1.setLayout(new FlowLayout()); text1 = new JTextField(5); text2 = new JTextField(5); text3 = new JTextField(5); String[] op = {"+","-","*","/"}; combo = new JComboBox(op); pane1.add(text1); pane1.add(combo); pane1.add(text2); pane1.add(new JLabel("=")); pane1.add(text3); pane2.setLayout(new FlowLayout()); //합계가 보여지는 textfield에 입력불가 text3.setEditable(false); button1= new JButton("확인"); button2= new JButton("삭제"); pane2.add(button1); pane2.add(button2); contentPane.add(pane1, BorderLayout.NORTH); contentPane.add(pane2, BorderLayout.CENTER); //x 버튼 종료 처리 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); button1.addActionListener(this); button2.addActionListener(this); setLocation(500,400); pack(); //사이즈를 명시하지 않을 경우 컴퍼넌트의 크기를 인식 자동으로 window 사이즈 변경 setVisible(true); } public static void main(String[] args) { JFrame.setDefaultLookAndFeelDecorated(true); new Calculation(); } public void actionPerformed(ActionEvent e){ Object obj = e.getSource();//이벤트가 발생한 객체반환 if(obj == button1){ t1 = text1.getText().trim();//String으로 받아오면서 공백제거 t2 = text2.getText().trim(); com = (String)combo.getSelectedItem(); //검증 if(!isDigit(t1)){ showErrMsg(text1,"숫자를 입력하시오"); return; }else num1 = Integer.parseInt(t1); if(!isDigit(t2)){ showErrMsg(text2,"숫자를 입력하시오"); return; }else{ num2 = Integer.parseInt(t2); doCalc(); } } else{ text1.setText(""); text2.setText(""); text3.setText(""); }// end if (obj ==button1) } private void doCalc(){ if(com.equals("/") && num2 ==0) showErrMsg(text2,"0으로 나눌 수 없습니다."); else{ //charAt(0) switch(com.charAt(0)){ case '+' : res =num1 + num2;break; case '-' : res =num1 - num2;break; case '*' : res =num1 * num2;break; case '/' : res =num1 / num2;break; } //String -> int 형변환 t1,t2 -> num1,num2 //com -> String -> char : com.charAt(0) //switch문을 이용해서 결과를 res text3.setText(res+""); } } private boolean isDigit(String value){ //1.value 루핑하면 숫자인지 문자인지 체크value.length(); //2.48~57사이 value.charAt(i) - >char a //a -> (int)a 48~57 //3.문자가 발견되면 for문을 빠져나와 return false; //음수 체크 if(value.startsWith("-") && value.length()>1){ value = value.substring(1); } //빈 문자열 처리 if("".equals(value))return false; //문자 체크 for(int i=0; i57) return false; } return true; /*for(int i = 0; i 58){ //해당 char값이 숫자가 아닐 경우 return false; } else{ return true; } } }*/ } private void showErrMsg(JTextField txt, String str){ txt.requestFocus(); txt.setText(""); text3.setText("");//에러 발생시 합계를 초기화 JOptionPane.showMessageDialog(this,str,"이러시면 곤란합니다",JOptionPane.ERROR_MESSAGE); //부모 컴포넌트,메세지,메세지 타이틀,메세지 타입 } }