package geg;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calc extends JFrame {
JLabel resultlabel; //계선결과출력부분
public static void main(String[] args) {
new Calc();
}
public Calc() {
super("자바 텀프로젝트 계산기");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton bNum[] = new JButton[10]; // 숫자버튼 컴퍼넌트를생성
resultlabel = new JLabel("0", JLabel.RIGHT);
add(resultlabel, BorderLayout.NORTH); // 계산창을보여준다
JPanel p = new JPanel(new GridLayout(4,4,5,5)); // 열,행,열사이의거리,행사이의거리
add(p, BorderLayout.CENTER); //계산기의몸체
plus = new JButton("+");
minus = new JButton("-");
multi = new JButton("*");
div = new JButton("/");
equal = new JButton("=");
clear = new JButton("C");
setSize(300,230);
setVisible(true);
int i;
for( i=0;i<bNum.length;i++ ) {
bNum[i] = new JButton(Integer.toString(i));
}
p.add(bNum[7]); p.add(bNum[8]); p.add(bNum[9]); p.add(plus);
p.add(bNum[4]); p.add(bNum[5]); p.add(bNum[6]); p.add(minus);
p.add(bNum[1]); p.add(bNum[2]); p.add(bNum[3]); p.add(multi);
p.add(bNum[0]); p.add(equal); p.add(clear); p.add(div);
NumberHandler nh = new NumberHandler();
for( i=0;i<bNum.length;i++ ) {
bNum[i].addActionListener(nh);
}
CalcHandler ch = new CalcHandler();
plus.addActionListener(ch);
minus.addActionListener(ch);
multi.addActionListener(ch);
div.addActionListener(ch);
equal.addActionListener(ch);
clear.addActionListener(ch);
setVisible(true);
}
String presentValue; // 현재입력중인숫자
int resultValue; // 중간계산 결과
char lastValue; // 이전 선택한 연산자
JButton plus, minus, multi, div, equal, clear ; // 연산버튼
// 숫자버튼 이벤트 처리
class NumberHandler implements ActionListener {
public void actionPerformed(ActionEvent e) { //버튼클릭시발동되는메소드
String s = e.getActionCommand();
if(presentValue == null) {
if( s.equals("0")) return ; // 첫자리가 0이면 무시
else presentValue = new String(); //첫자리이면 스트링 객체생성
}
if( presentValue.length() >= 9) return; // 9자리 넘으면 무시
presentValue += s; // 두번째 이후이면 누른 숫자 덧붙이기
resultlabel.setText(presentValue); //현재숫자화면에 표시
}
}
//기타계산버튼의이벤트처리
class CalcHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton source = (JButton)e.getSource();
int value;
// 지우기
if( source == clear ) {
resultlabel.setText("0"); //화면및 각변수 초기화
presentValue = null; //String 타입의 현재 숫자
lastValue = 0; // char 타입의 마지막 연산자
resultValue = 0; // int 타입의 중간계산 결과
return ;
}
if( presentValue != null ) { // 현재값과 널값이 같지않다면 값을출력
value = Integer.parseInt(presentValue);
switch(lastValue) {
case '+': resultValue += value; break;
case '-': resultValue -= value; break;
case '*': resultValue *= value; break;
case '/': resultValue/= value; break;
default : resultValue = value; break;
}
resultlabel.setText(Integer.toString(resultValue));
}
presentValue = null;
lastValue = source.getText().charAt(0);
}
}
}
JButton source = (JButton)e.getSource();
String s = e.getActionCommand();
이 두문장의 뜻좀알려주세요 ㅜㅜㅜ
이소스의 전체적인흐름도좀알려주시면감사하겠습니다.
공부중인데 어렵네요.. ㅜㅜ
버튼 이벤트 만드는거랑 밑에꺼는 부호 받아서 집어넣는거 아님?
자바 계산기 공부할려면 스윙 들어간거 하지말고 다른 콘솔에서 돌리는 것 부터 연습하고 스윙은 따로 공부하는게 좋음 둘다 모르는데 이 소스보면 이해 하나도 안될꺼임
존나 간단하게 만들려면 일단 식 입력하면 파싱해서 계산하는 것 부터 만들어보고 그 다음에 괄호연산이나 곱, 나눗셈 우선순위 연산할려면 후위연산법이라고 찾아서 그거 변환하는법 공부 한 다음에 만들어봐라
안녕하세요 수제화 구두 사이트 입니다. 네이버 다음 줌에서 퍼스트구두를 검색하고 자주 놀러와주세요.감사합니다.