일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- statement
- 상속
- Annotaion
- Join
- set
- transient
- swing
- InputStream
- JDBC
- java
- 8bit
- 16bit
- Transaction
- 다이얼로그
- where
- Serializable
- Connection
- DB
- 예외처리
- array
- driver
- Oracle
- stream
- Reader
- 자바
- 조회
- 오라클
- select
- 난수
- DB연동
- Today
- Total
오버플로
[Java] MVC Pattern 본문
MVC Pattern
- 클래스를 M(Model), V(View), C(Controller)의 역할로 나눠 작성하고 사용하는 개발방식
- 각 파일의 복잡도를 낮춰서 유지보수성을 향상시킨 구조
- 장점 : 유지보수가 편리 (프로그램의 생명이 길어짐)
- 단점 : 파일관리가 어려움, 값 전달 어려움, 에러 처리가 어려움, 개발 속도가 느림
- M (Mode) : 데이터 처리를 하는 코드 / 데이터를 저장하고 관리하는 일
- V (View) : 화면디자인을 처리하는 코드 / 데이터를 보여주는 일
- C (Controller) : 업무처리를 하는 코드
- JList, JComboBox, JTable이 MVC Pattern을 적용하여 만든 컴포넌트
-> 이 경우에는 컴포넌트에 직접 데이터 추가하는 것이 아니라, MODEL객체에 추가함
- 사용법)
1. JList
1) Model 객체 생성 (데이터를 가지고 처리하는 일)
DefaultListModel<E> dlm = new DefaultListModel<E>(); // 데이터 추가, 삭제 : Model 객체 사용.
dlm.addElement(값);
dlm.getElementAt(인덱스); - 권장하는 method (or dlm.elementAt(인덱스) )
dlm.remove(인덱스); or dlm.removeElementAt(인덱스); or dlm.removeElement(객체)
2) View 객체 생성 (Model 객체를 할당하여 View 생성)
JList<E> jl = new JList<E>(dlm) ;// Model과 View의 has a 관계
2. JComboBox
1) Model 객체 생성 (데이터를 가지고 처리하는 일)
DefaultComboBoxModel<E> dcbm = new DefaultComboBoxModel<E>() // 데이터 추가, 삭제 : Model 객체 사용.
dcbm.addElement(값);
dcbm.getElementAt(인덱스);
dcbm.removeElement(객체); or dcbm.removeElementAt(인덱스);
2) View 객체 생성 (Model 객체를 할당하여 View 생성)
JComboBox<E> jc = new JComboBox<E>(dcbm);
3. JTable
- DefaultTableModel은 여러 data가 들어갈 수 있으므로 Generic이 없음
- JScrollPane을 사용하지 않으면 컬럼명이 제공되지 않음
1) 객체화 : 컬럼명과 데이터를 넣어서 Model 클래스를 객체화
String[] columnNames = {“번호”,”이름”,”나이”,”주소};
String[][] data = { {“1”,”동동”,20”,”서울”}, {“”, “”, “”, “”} }
DefaultTableModel dtm = new DefaultTableModel(data, columnNames);
2) View 객체에 데이터를 가진 객체(Model)를 생성
JTable jt = new Jtable ( dtm ); // has a 관계
3) JScrollPane을 생성하여 배치
JScrollPane jsp = new JScrollPane(jt);
add(jsp);
# 오늘의 코딩 #
- JTable을 사용해보자!
package test;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
/**
* JTable의 사용
* @author user
*/
@SuppressWarnings("serial")
public class UseJTable extends JFrame {
public UseJTable() {
super("MVC Pattern을 도입한 클래스");
//1. Model 객체 생성
String[] columnNames = {"번호","이름","나이","주소"};
String[][] data = {
{"1","동","26","서울시 강남구"},
{"2","서","25","서울시 송파구"},
{"3","남","24","서울시 광진구"},
{"4","북","26","수원시 영통구"},
};
DefaultTableModel dtm = new DefaultTableModel(data,columnNames);
//2. 데이터(Model)를 넣어서 JTable(View)을 생성
JTable jt = new JTable(dtm);
JScrollPane jsp = new JScrollPane(jt);
//3. 배치
add("Center",jsp);// 스크롤페인 안 넣으면 컬럼명이 안 나옴
//4. 크기설정
setBounds(100,150,400, 300);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}//UseJTable
public static void main(String[] args) {
new UseJTable();
}//main
}//class
- 얜 Model과 View객체에 따라 하는 일이 다르다!
# 출력 결과 #
'Java' 카테고리의 다른 글
[Java] Adapter Class (0) | 2021.08.20 |
---|---|
[Java] Menu / Event Handling (0) | 2021.08.19 |
[Java] Layout Manager (배치관리자) (0) | 2021.08.17 |
[Java] JFC / Swing / Component (0) | 2021.08.15 |
[Java] Stack / autoboxing / unboxing (0) | 2021.08.12 |