자바 계산기 이벤트 - jaba gyesangi ibenteu

계산기 만들기를 이어서 해보겠다.

이전 포스팅에서 GUI형태의 계산기 모양을 만들었으니 

이벤트처리해서 만든 계산기를 작동시켜 보겠다.

00_1. ActionListener를 확장시켜 사용한다.

자바 계산기 이벤트 - jaba gyesangi ibenteu

00_2. Debug버튼을 눌렀을 때 작동 시킬 것이므로 다음과같이 버튼에 연결시켜준다.

자바 계산기 이벤트 - jaba gyesangi ibenteu

00_3. 마우스오른쪽버튼'-> 'Source'-> 'Override and Implement Methods' 로 actionPerformed메소드를 오버라이드 시킨다.

자바 계산기 이벤트 - jaba gyesangi ibenteu

01_1. 안에다 코딩을 해서 먼저 버튼을 눌렀을때 텍스트를 바꿔주도록 해보자.

자바 계산기 이벤트 - jaba gyesangi ibenteu

01_2. 바꿔지는 것을 확인할 수 있다.

자바 계산기 이벤트 - jaba gyesangi ibenteu

02_1. 버튼을 누를때마다 바뀌도록 해보자. 객체를 비교할때는 'void equals();' 임을 기억하자.

자바 계산기 이벤트 - jaba gyesangi ibenteu

02_2. 계속 바뀌는 것을 확인할 수 있다.

자바 계산기 이벤트 - jaba gyesangi ibenteu

03_1. 응용해서 버튼을 누르면 1로 바뀌게 해보자. 실제로는 button1에 연결시켜서 사용하자.

자바 계산기 이벤트 - jaba gyesangi ibenteu

03_2. 1이 입력됨을 확인할 수 있다.

자바 계산기 이벤트 - jaba gyesangi ibenteu

03_3. 계속 누르면 1이 계속 쓰여짐을 확인할 수 있다.

자바 계산기 이벤트 - jaba gyesangi ibenteu

※. 코드

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 {  // components는 전부 밖에서 선언해줘야 안에서 사용할 수 있으므로 좋음.

JPanel displayPanel;

JPanel buttonPanel;

JPanel debugPanel;

JTextField display;

JButton[] buttons;  // 0 ~ 9 까지 10개의 버튼을 배열로 써서 만들거임.

JButton btnPlus;

JButton btnMinus;

JButton btnProduct;  // Multiply 

JButton btnDivide;

JButton btnEqual;

JButton btnCE;

JButton btnDebug;

JLabel debugMsg;

public MyFrame()

{

this.setSize(300,400);

this.setTitle("GUI Test");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

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());

/* display 관련 */

// display 에 있는 panel에 component를 만들어서 붙이겠다.

display = new JTextField(11);  // 글자수가 '11자'가 들어가게 하겠다.

display.setText("0");  // 초기 계산기 화면을 0으로 써놓겠다.

display.setHorizontalAlignment(JTextField.RIGHT);  // field 내 글씨를 오른쪽정렬.

Font font = new Font("Serif", Font.BOLD, 30);  // ※ Serif ; 삐침이 나와있는 글씨체. san serif ; non 삐침.

display.setFont(font);

// displayPanel 에다가 display component를 붙인다.

displayPanel.add(display);

/* 버튼 관련 */

Font fontBtn = new Font("Serif", Font.BOLD, 30);  // 버튼에도 폰트를 주고싶어서 객체생성.

// buttonPanel 에 component 만들고 붙이기.

buttons = new JButton[10];  // array 메모리만 만들어진것이다.

// 실제 버튼 객체 생성하기.

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

{

//buttons[i] = new JButton(""+i);  // i 를 String 값으로 받고싶다.

buttons[i] = new JButton(Integer.toString(i));  // i 를 String 값으로 받고싶다.

buttons[i].setFont(fontBtn);  // 버튼의 폰트에 대한 지정

}

btnPlus = new JButton("+");

btnMinus = new JButton("-");

btnProduct = new JButton("*");

btnDivide = new JButton("/");

btnEqual = new JButton("=");

btnCE = new JButton("CE");

// 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(btnEqual);

buttonPanel.add(btnCE);

//debugPanel 에 debugMsg 와 btnDebug 를 만들어서 붙이겠다.

debugMsg = new JLabel("Start Debug");

debugMsg.setToolTipText("Hello World");  // 마우스를 debugMsg 위에 올려놓으면 Text 가 말풍선 형태로 출력.

btnDebug = new JButton("Debug Button");

btnDebug.addActionListener(this);  // 리스너를 이벤트소스에 등록한다. (항상 이 형식으로 사용하면 된다.)

debugPanel.add(debugMsg);

debugPanel.add(btnDebug);

//btnDebug.setEnabled(false);

// frame에다가 panel들 붙이기.

this.add(displayPanel, BorderLayout.NORTH);

this.add(buttonPanel, BorderLayout.CENTER);

this.add(debugPanel, BorderLayout.SOUTH);

//debugPanel.setVisible(false);

String msg = debugMsg.getText();

System.out.println(msg);

//this.pack();

this.setVisible(true);

}// MyFrame Method

@Override

public void actionPerformed(ActionEvent e) {

if(e.getSource() == btnDebug)

{

//System.out.println("btnDebug is Clicked.!");

//debugMsg.setText("Hello World.");

if(debugMsg.getText().equals("Start Debug"))  // 객체들의 비교는 == 가 아니라 .equal 객체(String)와 객체를 비교할때.

{

debugMsg.setText("Hello World.");

}else{

debugMsg.setText("Start Debug");

}

}

//1번 버튼이라고 가정하고 0을 1로 바꿔보자.(display 값이 0이기 때문에)

// 현재 display 값이 '0'이면

// display.setText("1")

// else

// 현재 디스플레이값 display.getText() + "1"

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

{

display.setText("1");

}else

{

display.setText( display.getText() + "1");

}

}

}// MyFrame Class

public class Test {

public static void main(String[] args) {

MyFrame frame = new MyFrame();

}// main

}// Main Class