자바로 만든 사칙연산 계산기 입니다. 기본적인
원리!! 우선 GUI는 swing으로 덕지덕지 만들었습니다. 그리고 인터넷에서 긁어온 소스의 닫기버튼에 대한 구현이 아래 처럼 되어 있어서 닫기 버튼을 눌러도 프로세스가 살아있더라구요.. addWindowListener(new WindowAdapter() { public void windowClosed(WindowEvent e){ System.exit(0); } }); 그래서 이러게 바꿔줬더니 잘 꺼지는 군요.. addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); } }); 코드는 아래와 같습니다. 아... 넘
길다 ㅠㅠ 첨부도 할게요... package cal; import javax.swing.*; import java.awt.BorderLayout; public class Calculator extends JFrame implements ActionListener, KeyListener{
final int MAX_INPUT_LENGTH = 20; //최대한 입력 가능한 길이를 제한하고 //각 모드별로 index를 부여 boolean clearOnNextDigit; //화면에 표시될 숫자를 지울지 말지 결정하는 녀석 double lastNumber; //마지막에 기억될 수 private JLabel output; //숫자가 표시될 공간 //GUI를 생성해보자. setBackground(Color.gray); //프레임의 배경은 회색 masterPanel = new JPanel(); output = new JLabel("0", JLabel.RIGHT); // 레이블의 초기 값은 0 buttons = new JButton[23]; btnPanel = new JPanel(); //숫자 버튼 만듦0에서9까지. //연산 버튼 만듦. //컨트롤 버튼 만듦. //각 버튼의 색을
다르게 //패널에
숫자버튼 및 연산자 버튼 배치 for(int i=7; i<=9 ; i++){ btnPanel.add(buttons[13]); // / for(int i=4; i<=6 ; i++){ btnPanel.add(buttons[14]); //
* for(int i=1; i<=3 ; i++){ btnPanel.add(buttons[15]); // - btnPanel.add(buttons[0]); // 0 //컨트롤 패널에 컨트롤 버튼을 배치 ctrPanel.add(buttons[20]); // 각 컴포넌트를 프레임에 추가 getContentPane().add(output, BorderLayout.NORTH); //버튼 ActionListener, Keylistener 활성! 이놈들을 추가해야 버튼에 뭔일이 발생하는지 봅니다. clearAll(); //모든 값을 초기화!! addWindowListener(new WindowAdapter() { //마우스 입력에 대한 동작 double result = 0; for(int i=0 ; i<buttons.length ; i++){ result = Math.sqrt(getNumberInDisplay());
catch(Exception ex) result = 1 / getNumberInDisplay(); catch(Exception
ex) { catch(Exception ex) { //키보드
입력에 대한 동작 int keycode = e.getKeyChar();
private void clearAll() { private void backspace(){
if (getDisplayString().length() < 1) private void processOperator(String string) {
if (!lastOperator.equals("0")){ }else{ clearOnNextDigit = true;
private double processLastOperator() throws Exception{ if (lastOperator.equals("/")){
result = lastNumber / numberInDisplay; if (lastOperator.equals("*")){ return result; private void processEquals() { if (displayMode != ERROR_MODE){ private void addPoint() { if (clearOnNextDigit)
String inputString = getDisplayString(); // 이미 점이 찍혀 있으면 안 찍음.
private void processSingChange() { if (numberInDisplay != 0) private void displayResult(double result) { private void displayError(String error) { private double getNumberInDisplay() {
private void addToDisplay(int i) { String inputString = getDisplayString(); if(inputString.indexOf("0") == 0){ displayMode
= INPUT_MODE;
private void setDisplayString(String string) {
private String getDisplayString() { public static void main(String args[]){ @Override
@Override |