[App 개발] 진짜 간단한 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