자바 GUI 공학용 계산기 - jaba GUI gonghag-yong gyesangi

GUI 에 계산기 만들기 완성하기.

형태 만들기 및 간단한 작동원리는 아래 주소 참조.

http://blog.naver.com/pandekten5/220776972561 

00. 코딩하고 실행 해보자.

자바 GUI 공학용 계산기 - jaba GUI gonghag-yong gyesangi

01. 계산기 GUI창이 뜬다.

자바 GUI 공학용 계산기 - jaba GUI gonghag-yong gyesangi

02. 임의의 숫자버튼(여기서는 2)을 눌러서 표기되는것을 확인하자.

자바 GUI 공학용 계산기 - jaba GUI gonghag-yong gyesangi

03. 3/2 를 누르고 결과값이 맞게 출력되는지 확인하자.

    또한, 아래 3이 저장되어서 divide 오퍼레이션을 써서 된것을 확인할 수 있다.

자바 GUI 공학용 계산기 - jaba GUI gonghag-yong gyesangi

※. 코드

import java.awt.BorderLayout;

import java.awt.FlowLayout;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

class MyFrame extends JFrame implements ActionListener

{

private JPanel displayPanel;

private JPanel buttonPanel;

private JPanel debugPanel;

private JTextField display;

private JButton[] buttons; // 0 ~ 9

private JButton btnPlus;

private JButton btnMinus;

private JButton btnProduct;

private JButton btnDivide;

private JButton btnEqual;

private JButton btnCE;

private JLabel prev;

private JLabel operator;

private JLabel flag;

public MyFrame()

{

this.setSize(300, 400);

this.setTitle("GUI TEST");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Programming Here

this.setLayout(new BorderLayout());

/*

 * 3개의 panel 객체 만들고 각자 layout 설정

 */

displayPanel = new JPanel();

buttonPanel = new JPanel();

debugPanel = new JPanel();

displayPanel.setLayout(new FlowLayout());

buttonPanel.setLayout(new GridLayout(0,4, 5, 5));

debugPanel.setLayout(new FlowLayout());

/*

 * displayPanel의 component를 만들어서 붙이기

 */

display = new JTextField(11);

display.setText("0");

display.setHorizontalAlignment(JTextField.RIGHT);

Font font = new Font("Serif", Font.BOLD, 30);

display.setFont(font);

displayPanel.add(display);

/*

 * buttonPanel에 component 만들고, 붙이기

 */

Font fontBtn = new Font("Serif", Font.BOLD, 20);

buttons = new JButton[10];

// 실제 버튼 객체 생성

for(int i=0; i<buttons.length; i++)

{

//buttons[i] = new JButton("" + i);

buttons[i] = new JButton(Integer.toString(i));

buttons[i].setFont(fontBtn);

buttons[i].addActionListener(this);

}

btnPlus = new JButton("+");

btnMinus = new JButton("-");

btnProduct = new JButton("*");

btnDivide = new JButton("/");

btnEqual = new JButton("=");

btnCE = new JButton("CE");

btnPlus.addActionListener(this);

btnMinus.addActionListener(this);

btnProduct.addActionListener(this);

btnDivide.addActionListener(this);

btnEqual.addActionListener(this);

btnCE.addActionListener(this);

// 1 2 3 +

// 4 5 6 -

// 7 8 9 *

// 0 / = CE

buttonPanel.add(buttons[1]);

buttonPanel.add(buttons[2]);

buttonPanel.add(buttons[3]);

buttonPanel.add(btnPlus);

buttonPanel.add(buttons[4]);

buttonPanel.add(buttons[5]);

buttonPanel.add(buttons[6]);

buttonPanel.add(btnMinus);

buttonPanel.add(buttons[7]);

buttonPanel.add(buttons[8]);

buttonPanel.add(buttons[9]);

buttonPanel.add(btnProduct);

buttonPanel.add(buttons[0]);

buttonPanel.add(btnDivide);

buttonPanel.add(btnCE);

buttonPanel.add(btnEqual);

/*

 * debugPanel에 debugMsg, btnDebug 만들어서 붙이기

 */

prev = new JLabel("");

operator = new JLabel("");

flag = new JLabel("");

debugPanel.add( new JLabel("PREV:"));

debugPanel.add(prev);

debugPanel.add( new JLabel("OPERATOR:"));

debugPanel.add(operator);

debugPanel.add( new JLabel("FLAG:"));

debugPanel.add(flag);

/*

 * frame에다가 panel 붙이기

 */

this.add(displayPanel, BorderLayout.NORTH);

this.add(buttonPanel, BorderLayout.CENTER);

this.add(debugPanel, BorderLayout.SOUTH);

//debugPanel.setVisible(false);

this.setVisible(true);

}

@Override

public void actionPerformed(ActionEvent e) {

for(int i=0; i<buttons.length; i++)

{

if(e.getSource() == buttons[i])

{

if(display.getText().equals("0"))

{

display.setText(""+i);

// display.setText(Integer.toString(i));

}else

{

if(operator.getText().equals(""))

{

display.setText(  display.getText() + i);

}else

{

if(flag.getText().equals(""))

{

display.setText(""+i);

flag.setText("#");

}else

{

display.setText(  display.getText() + i);

}

}

}

}

}

if(e.getSource() == btnEqual)

{

double op1, op2, result;

op1 = Double.parseDouble(prev.getText());  //문자->숫자(double)

op2 = Double.parseDouble(display.getText());

if(operator.getText().equals("+"))

{

result = op1 + op2;

display.setText("" + result);

// display.setText( String.valueOf(result));

}

if(operator.getText().equals("-"))

{

result = op1 - op2;

display.setText("" + result);

// display.setText( String.valueOf(result));

}

if(operator.getText().equals("*"))

{

result = op1 * op2;

display.setText("" + result);

// display.setText( String.valueOf(result));

}

if(operator.getText().equals("/"))

{

result = op1 / op2;

display.setText("" + result);

// display.setText( String.valueOf(result));

}

}

if(e.getSource() == btnPlus)

{

prev.setText( display.getText() );

operator.setText("+");

flag.setText("");

}

if(e.getSource() == btnMinus)

{

prev.setText( display.getText() );

operator.setText("-");

flag.setText("");

}

if(e.getSource() == btnProduct)

{

prev.setText( display.getText() );

operator.setText("*");

flag.setText("");

}

if(e.getSource() == btnDivide)

{

prev.setText( display.getText() );

operator.setText("/");

flag.setText("");

}

if(e.getSource() == btnCE)

{

display.setText("0");

prev.setText("");

operator.setText("");

flag.setText("");

}

}

}

public class Test {

public static void main(String[] args) {

MyFrame frame = new MyFrame();

}

}