본문 바로가기

JAVA

#10 AWT vs Swing,계산기 만들기

<비교>

AWT: 내부적으로 C언어로 구성.

운영체제에서 지원하는 컴포넌트를 얻어 옴.

java.awt.*;

Swing: 순수자바언어로 구성. (운영체제에 상관없이 동일한 컴포넌트 지원)

javax.swing.*;

<MVC Model2구조>

1. Model(모델)

- 비즈니스로직과 관련된 부분 처리.

- 데이터베이스 관련로직 구현

- JSP Beans, EJB Component

- 애플리케이션의 데이터를 표현.

예)

class Calculator{

public int plus(int su1, int su2){

return su1+su2;

}

}

---> 데이터를 가공 처리

int result = plus(2,3);

class Person{

String name;

int age;

String job;

}

---> 서로 관련있는 속성을 클래스로 묶음 : JavaBeans

class DBTest{

public void insert(){

}

}

---> DB access하는 클래스

2. View(뷰)

- 사용자에게 알맞은 화면을 보여주는 역할 수행.

- JSP, CustomTag

- 데이터를 시각적으로 표현하는것.

역할)

1. 결과값 출력

2. 사용자 요구(버튼클릭: 음료수가 먹고싶다.)

3. 사용자 데이터 입력.

3. Controller

- 애플리케이션의 흐름제어나 사용자의 처리요청을 구현

- 사용자인증, 보안설정이라든지

전체 애플리케이션에 영향을 미치는 요소구현

- 사용자 요청에 알맞은 모델을 사용하고

사용자에게 보여줄 뷰를 선택

- Servlet

- 사용자가 View(GUI)를 통해 입력을 하면 Model(데이터)을

변경해 주는것.


<계산기>

MVC패턴으로 작성

- 뷰 (calc.view)

CalcView.java : 계산기폼

- 모델 (calc.model)

Calculator.java : 더하기, 빼기, 곱하기, 나누기 기능

- 컨트롤러 (calc.control)

CalcController.java : 전체 프로그램 제어 (main()메소드 포함)


<Controller>

package calc.control;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import calc.model.Calculator;

import calc.view.CalcView;

public class CalcController implements ActionListener{

//뷰를 등록

CalcView view;

public CalcController() {

view = new CalcView();

view.bt_calc.addActionListener(this);

}

@Override

public void actionPerformed(ActionEvent e) {

//===> 컨트롤러의 역할 코드를 위치.

if(e.getSource() == view.bt_calc) {//1.

//2. 데이터 얻기

String su1 = view.tf_su1.getText();

String su2 = view.tf_su2.getText();

String oper = view.cb_oper.getSelectedItem().toString();

//oper = "+" "-" "*" "/"

//3. Model 객체생성

/*Calculator calc = new Calculator();

int result = calc.plus(

Integer.parseInt(su1),

Integer.parseInt(su2));

System.out.println("result="+result);*/

//3.

Calculator calc = new Calculator(

Integer.parseInt(su1),

Integer.parseInt(su2),

oper);

String result = calc.getResultStr();

view.la_result.setText(result);

}

}

public static void main(String[] args) {

new CalcController();

}


★★<컨트롤러의 역할> - 전체 프로그램에 대한 흐름 제어!!

1. (뷰를 통해 전달된)사용자의 요청 분석 : if(ob==bt_new)

2. (사용자가)입력된 데이터 얻어오기 : tf.getText()

3. 모델클래스 객체생성!! : Calculator c = new Calculator();

- 메소드 호출 c.plus(2,3);

- 리턴된 데이터를 (변수에)저장 int result = c.plus(2,3);

4. 페이지 이동, 이동할 페이지(프레임) 선택 f1.setVisible(false);

f2.setVisible(true);

5. 유효성 검사 ===> 뷰에서 검사하기도 함.

<Model>


package calc.model;

public class Calculator {//사칙연산 기능 정의

/*public int plus(int su1, int su2) {

return su1+su2;

}*/

private int su1;

private int su2;

private String oper;

private int result;

public Calculator(int su1, int su2, String oper) {

this.su1 = su1;

this.su2 = su2;

this.oper = oper;

choice();

}

private void choice() {

if(oper.equals("+")) plus();

else if(oper.equals("-")) minus();

else if(oper.equals("*")) multi();

else div();

}//choice

public void plus() {

result = su1+su2;

}

public void minus() {

result = su1-su2;

}

public void multi() {

result = su1*su2;

}

public void div() {

result = su1/su2;

}

public String getResultStr() {

return "결과값: "+su1+ oper+ su2+ "="+ result;

}

}


<View>

package calc.view;

import java.awt.FlowLayout;

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JTextField;

public class CalcView extends JFrame{

public JTextField tf_su1,tf_su2;

public JComboBox<String> cb_oper;

public JButton bt_calc;

public JLabel la_result;

public CalcView() {

setTitle("MVC계산기");

tf_su1 = new JTextField(5);

tf_su2 = new JTextField(5);

cb_oper = new JComboBox<>();

cb_oper.addItem("+");

cb_oper.addItem("-");

cb_oper.addItem("*");

cb_oper.addItem("/");

bt_calc = new JButton("계산");

la_result = new JLabel();

setLayout(new FlowLayout());

add(tf_su1);

add(cb_oper);

add(tf_su2);

add(bt_calc);

add(la_result);

setBounds(300,200, 320,120);

setVisible(true);

setResizable(false);

setDefaultCloseOperation(EXIT_ON_CLOSE);

}//생성자

}