• 북마크
  • 추가메뉴
어디로 앱에서 쉽고 간편하게!
애플 중고 거래 전문 플랫폼
오늘 하루 보지 않기
KMUG 케이머그

소프트웨어

[App 개발] 진짜 간단한 AWT 계산기입니다..

본문

import java.awt.*;
import java.awt.event.*;

public class Calcurator_ex extends Frame implements ActionListener{
// 인스턴스 변수 선언
Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn0;
Button equal, plus, minus, divide, multiple, decimal, clear, clearAll, back;
TextField tf;
Label lab;
boolean flag, decimalFlag;
Panel p1, p2;
String inputStr1="", inputStr2="", op="";
double i, j, result;
Dialog dial;

public Calcurator_ex(String title){
super(title); // 상위 생성자를 호출한다.
setLayout(new BorderLayout()); // 기본 레이아웃지정

lab = new Label("허접계산기");
lab.setBackground(Color.lightGray);

// 버튼 객체 생성
btn1 = new Button("1");
btn2 = new Button("2");
btn3 = new Button("3");
btn4 = new Button("4");
btn5 = new Button("5");
btn6 = new Button("6");
btn7 = new Button("7");
btn8 = new Button("8");
btn9 = new Button("9");
btn0 = new Button("0");

equal = new Button("=");
plus = new Button("+");
minus = new Button("-");
divide = new Button("/");
multiple = new Button("*");
decimal = new Button(".");

clear = new Button("CE");
clearAll = new Button("C");
back = new Button("BACK");


// 계산값을 뿌려주기위한 TextField 생성
tf = new TextField(30);
tf.setEditable(false); // textfield 의 값을 수정 못하게 막음

// Frame 에 들어갈 패널 객체 생성. 내부에 각기 다른 레이아웃 매니져 설정
p1 = new Panel(new FlowLayout());
p2 = new Panel(new GridLayout(5,4,1,1));

// 각 패널에 컴포넌트 등록
p1.add(tf);

p2.add(lab);
p2.add(back);
p2.add(clear);
p2.add(clearAll);

p2.add(btn7);
p2.add(btn8);
p2.add(btn9);
p2.add(plus);
p2.add(btn4);
p2.add(btn5);
p2.add(btn6);
p2.add(minus);
p2.add(btn1);
p2.add(btn2);
p2.add(btn3);
p2.add(multiple);
p2.add(btn0);
p2.add(decimal);
p2.add(equal);
p2.add(divide);

// 각 버튼에 액션 리스너를 등록
btn1.addActionListener(this);
btn2.addActionListener(this);
btn3.addActionListener(this);
btn4.addActionListener(this);
btn5.addActionListener(this);
btn6.addActionListener(this);
btn7.addActionListener(this);
btn8.addActionListener(this);
btn9.addActionListener(this);
btn0.addActionListener(this);
plus.addActionListener(this);
minus.addActionListener(this);
multiple.addActionListener(this);
divide.addActionListener(this);
decimal.addActionListener(this);
equal.addActionListener(this);

clear.addActionListener(this);
clearAll.addActionListener(this);
back.addActionListener(this);

// Frame 에 패널을 등록한다. 이때 레이아웃 매니져를 이용하여 상단, 센터에 패널을 등록한다.
add(p1, BorderLayout.NORTH);
add(p2, BorderLayout.CENTER);

// 윈도우 종료 버튼에 윈도우 리스너 등록. 인터페이스를 사용하지 않고 WindowAdapter 클래스를 사용하였다.
// WindowListener 인터페이스 사용시 그 안에 구현된 메소드를 전부 적어줘야 하기때문에 사용안함...
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});

setResizable(false); // 사이즈 조정을 못하게 함
pack(); // Frame 에 등록되어있는 크기 만큼 자동으로 사이즈 조정
setVisible(true);

}
// Event 발생시 동작하는 메소드 implements ActionListener 를 구현하면 반드시 구현해야하는 메소드
public void actionPerformed(ActionEvent e){
String s = e.getActionCommand(); // 이벤트가 발생시 발생한 액션의 Command 를 스트링에 담는다.
if(s == "1" || s == "2" ||s == "3" || s == "4" || s == "5" || s == "6" || s == "7" || s == "8" || s == "9" || s == "0"){
if(flag == false){ // 만약 플래그가 false 라면 이것은 연산자가 아직 안들어왔다는 이야기.
inputStr1 = inputStr1 + s;
tf.setText(inputStr1);
}else{ // flag 가 true 라면 연산자가 이미 들어왔다는 이야기 이다. 새로운 변수에 액션을 담아야 한다.
inputStr2 = inputStr2 + s;
tf.setText(inputStr2);
}
}

// 연산자가 들어왔을때 그 연산자를 변수에 담아놓는다.
if(s == "+" || s == "-" || s == "*" || s == "/"){
flag = true;
decimalFlag = false;
op = s;
tf.setText("");
}
// equal 의 액션이 발생했을 경우 String 변수에 담긴 값을 숫자형으로 형변환 한 후
// 각각의 Op 에 맞는 연산을 수행한다.
if(s == "="){
if(flag == false){
showDialog("연산자를 선택하고 제대로 된 계산을 수행하시오!!");
}else{
i = Double.parseDouble(inputStr1); // 실수 연산을 위해 Double 로 받아온다.
j = Double.parseDouble(inputStr2); // 실수 연산을 위해 Double 로 받아온다.

if(op == "+"){ // 더하기
result = i + j;
tf.setText(""+result);
}
if(op == "-"){ // 빼기
result = i - j;
tf.setText(""+result);
}
if(op == "*"){ // 곱하기
result = i * j;
tf.setText(""+result);
}
if(op == "/"){ // 나누기
if(i == 0 || j == 0){
tf.setText("0 으로 나누기 못함");
}else{
result = i / j;
tf.setText(""+result);
}
}
}
}

if(s == "CE"){ // 전체 지우기
inputStr1 = "";
inputStr2 = "";
i = 0;
j = 0;
result = 0;
flag = false;
decimalFlag = false;
tf.setText("");
}
if(s == "C"){ // 방금전에 입력한거 지우기
if(flag == false){
inputStr1 = "";
tf.setText("");
}else{
inputStr2 = "";
tf.setText("");
}
}

if(s == "."){ // 점이 들어왔을때...
if(decimalFlag == true){
showDialog("점을 두개이상 찍지 마세요");
tf.setText("");
decimalFlag = false;
}
if(flag == false){
inputStr1 = inputStr1 + s;
tf.setText(inputStr1);
}else{
inputStr2 = inputStr2 + s;
tf.setText(inputStr2);
}
decimalFlag = true;
}
if(s == "확인"){ // 점을 한개 이상 찍었을때는 경고창을 띠워준다.
dial.dispose();
}
if(s == "BACK"){ // 한글자 지울때..
backSpace();
}
} // end actionPerformed

// 경고창 띠우기...
public void showDialog(String msg){
Button bt = new Button("확인");
bt.addActionListener(this);
if(dial == null){
dial = new Dialog(this, "경고!!!", true);
dial.add("Center", new Label(msg));
dial.add("South", bt);

dial.pack();
dial.setVisible(true);
}else{
dial.pack();
dial.setVisible(true);
}
}

// 글자를 뒤에서 하나씩 지워준다.
public void backSpace(){
if(flag == false){
inputStr1 = inputStr1.substring(0, inputStr1.length()-1);
tf.setText(inputStr1);
}else{
inputStr2 = inputStr2.substring(0, inputStr2.length()-1);
tf.setText(inputStr2);
}
}

// main 메소드
public static void main(String args[]){
new Calcurator_ex("계산기를 만들자..");
}
}

말그대로 계산기입니다.

전에 친구랑 웹 강좌하면서 만들어 봤는데..
흠냐..
허접이네요.
혹 맥에서 자바 코딩하시는 분있으시면 같이 공부하면 좋을 법한데~
이놈에 SCJD 개발자 과정은 먼넘에 인터뷰를 해야 되는지..
0 0
로그인 후 추천 또는 비추천하실 수 있습니다.
포인트 96,176
가입일 :
2003-11-16 03:57:20
서명 :
ICT engineer. PMO
자기소개 :
미입력

최신글이 없습니다.

최신글이 없습니다.

댓글목록 0

등록된 댓글이 없습니다.
전체 17 건 - 1 페이지
2017.10
20

[OS X] OS X 10.11 이상 업데이트 후 OS X에서 화면 밝기 조정이 안되는 경우 ( 펑션키는 동작하나 화…

안녕하세요. 오랫만에 글을 올리네요. 거의 십여년만에 올리는 자게글인듯... 감회가 ㅠㅠ 저는 2012년 맥북프로 레티나 15인치를 이용하고 있습니다. OS X 10.8 , 10.9 에서는 큰 문제 없이 모든 펑션키가 동작하나 유독 OS X…

2006.09
11

[App 개발] 가짜사과 카와리7 및 BotCli UB화 업데이트

■ BotCli #36 http://ccm.sherry.jp/cgi-bin/dita/dita.cgi/botcli/ * i386/ppc 유니버설 바이너리화. * MacOS X 10.4 (Tiger) 이후 환경에서 동작 * 송신…

2006.09
08

[App 개발] 가짜사과의 UB 빌드에서 생기는 문제..

전에 아키텍쳐에서 i386과 PPC를 모두 체크한뒤 UB 빌드가 안된다고 글을 올렸었는데.. 제작자인 PHO씨도 동일한 문제로 고민했던 것 같습니다. Apple의 cocoa-java의 지원이 미흡하다는 점도 한몫한듯,,. 결국 …

2006.09
07

[App 개발] 가짜사과 107 릴리즈 (2006년 9월 6일자)

일본의 투채널에서 NiseRingo의 제작자인 PHO 씨와 글타래에서 몇가지 의견을 주고 받았습니다. PHO 씨께서 가짜사과의 인텔 바이너리화해서 소스를 다시 올려주신다고 했는데.. 오늘 늦게 확인하니 올라왔네요. ;; 일단 릴…

2006.09
07

[App 개발] 가짜사과를 Xcode 2.4에서 빌드시 오류?

Xcode를 2.4로 업데이트하고 나서. 이곳에 있는 가짜사과 소스를 빌드하려고 하니.. 떡하니 오류가 나와주시네요.. 흠.. 이전에는 문제 없이 빌드가 되었었는데.. -0-; 뭐가 문제지 그리고 분명 아키텍쳐에서 i386과 …

2006.08
31

[App 개발] yahoo 위젯을 dashcode로 OS X 위제승로 튠이 가능?

예전에 10.4 발표하면서 진행된 techtalk에서 제가 질문한 내용중에 콘파블레이터의 야후 위젯이 html과 java scripts로 이뤄져있으니 이것의 소스를 가지고 OS X의 위젯으로 재생성하는 것이 가능할까.. 라는 이야기를 했었는데.. …

2006.07
12

[App 개발] 엉둥한 생각 -1- 퀵타임에서 동영상 smi 자막을 불러오는 컨퍼넌트를 개발한다면?

흠.. 이제 출시되는 맥에 기본으로 프론트 로우가 지원되니까.. flip4mac 과 같은 추가 애드온 처럼 smi 자막을 quicktime에서 읽기 가능하게 해주는 것이 나오면 편리하지 않을까요 그러면 wmv9 코덱의 영상도 quic…

2005.09
29

[App 개발] 요즘 이런 망상에 빠져.. ~_~;

개발실 게시판에는 정말로 오랫만의 포스팅입니다. 그동안 일도 바쁘고.. 개인적인 작업과 학업.. 모두 바쁜 관계로.... 이제 어느덧 9월도 마지막에 다가가고 있습니다. 최근에는 그냥 알바식으로 일하면서.. 인체 인식으로 PC를…

2005.03
26

[App 개발] 프로그래밍 공부하시는 분들이나 개발자 분들은 어떤 컴파일러를 이용하시나요?

오랫만에 개발실에 글을 남기네요.. 영환군입니다~ 최근에 ibm PC를 XP pro SP2로 세팅하면서 다시금 간단히 EditPlus와 Java SDK로 자바 코딩을 세팅하고.. 간단한 C++ 부터 windows APP까지의 컴파일을 위해 여…

2005.01
02

[App 개발] 프로그래밍 공부하는 방법

-------------------------------------------------------------------------------- 그냥 나름대로 정리해봄.. ----------------------------------------…

2004.12
06

[App 개발] 유용한 MacOS X external commands

요즘 타 맥관련 사이트에서도 열심히 글타래를 정독하면서 OS X의 근본적인 unix나 이래저래 공부를 하고 있습니다. 그중에서 unix 커맨드중에서 유용한 것들에 대한 설명이 되어있는 글을 보고 이렇게 올려드려요~ 공부하시는 분들에겐 도…

2004.01
29

[App 개발] java2 network (chat server/client)

-- TCP기반의 에코서버/클라이언트 //EchoClientTest.java   import java.io.*; import java.net.*; public class &nbs…

2004.01
29

열람중 [App 개발] 진짜 간단한 AWT 계산기입니다..

import java.awt.*; import java.awt.event.*; public class Calcurator_ex extends Frame implements ActionListener{ // 인스턴스 변수 선언 Butt…

2004.01
29

[App 개발] AWT java text 에디터입니다.

import java.awt.*; import java.awt.event.*; import java.io.*; class EditorDemo extends Frame implements ActionListener{ TextAr…

2003.12
12

[App 개발] 맥용 간단한 자바 IDE 슈가 입니다.

장점은 1. 용량이 작다. 2. 쉬운 인터페이스 담점은 1. 한글지원이 조금 아쉽다.. (글자 깨짐) 2. 지원하는 옵션이 적다. 제가 Xcode와 더불어 사용하는 툴입니다. 기존에 아범에서 에디트 플러스나 메모장으로 짜시…

2003.12
07

[App 개발] 코코아는 아니고.. 자바 개발툴..

이번에 알북 12인치를 구입하고, 자바 툴을 찾던중.. 제 구미를 당긴 것이 3가지정도 있었는데.. 1. J 빌더 2. BBedit 3. Xcode 4. sugar 이정도입니다. 모두 돌려봤는데.. 제가 하는 작업이 JSP보다…

2003.11
28

[App 개발] 코코아?? 카본??

안녕하세요. 저는 자바 프로그래머입니다. C언어도 할줄은 아는데.. 포인터땜시.. 자바로 바로 스위칭한 넘입니다. 맥으로 앞으로 작업하려고하는데.. 코코아나.. 리얼 베이직이란 것도 배워보려고 하는데.. 고수님들의 많은 조언 부탁드립니다~ …