MVC 디자인 패턴
M: DB, V: View, C: Controller
package member;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
public class MemberMgr {
private DBConnectionMgr pool;
public MemberMgr() {
pool = DBConnectionMgr.getInstance();
}
// 모든 리스트 : select -db1
public Vector<MemberBean> selectAll() {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
Vector<MemberBean> vlist = new Vector<MemberBean>();
try {
con = pool.getConnection();
sql = "select * from tblMember";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();// SQL문 실행
while (rs.next()) {
MemberBean bean = new MemberBean();
bean.setId(rs.getInt("id"));// id: 컬럼명
bean.setName(rs.getString("name"));
bean.setPhone(rs.getString("phone"));
bean.setAddress(rs.getString("address"));
bean.setTeam(rs.getString("team"));
vlist.addElement(bean);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt, rs);
}
return vlist;
}
// 저장 : insert -db2
public boolean insert(MemberBean bean) {
Connection con = null;
PreparedStatement pstmt = null;
String sql = null;
boolean flag = false;
try {
con = pool.getConnection();
sql = "insert tblMember values (null, ?, ?, ?, ?)";
pstmt = con.prepareStatement(sql);
// 첫번째 ?에 매개변수로 들어온 빈즈에 name 값 셋팅: 'aaa'
pstmt.setString(1, bean.getName());
pstmt.setString(2, bean.getPhone());
pstmt.setString(3, bean.getAddress());
pstmt.setString(4, bean.getTeam());
// insert, update, delete 적용된 레코드 개수
int cnt = pstmt.executeUpdate();// 정상적인 동작일경우 1, 아닐경우0 저장
if (cnt == 1)
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt);
}
return flag;
}
// 한개의 레코드 : select -db1
public MemberBean select(int id) {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
MemberBean bean = new MemberBean();
try {
con = pool.getConnection();
sql = "select * from tblMember where id = ?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, id);
rs = pstmt.executeQuery();
if (rs.next()) {
rs.getInt("id");
bean.setId(rs.getInt("id"));
bean.setName(rs.getString("name"));
bean.setPhone(rs.getString("phone"));
bean.setAddress(rs.getString("address"));
bean.setTeam(rs.getString("team"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt, rs);
}
return bean;
}
// 수정 : update -db2 -> insert 유사
public boolean update(MemberBean bean) {
Connection con = null;
PreparedStatement pstmt = null;
String sql = null;
boolean flag = false;
try {
con = pool.getConnection();
sql = "update tblMember set name = ?, phone=?," + "address = ?, team = ? where id =?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, bean.getName());
pstmt.setString(2, bean.getPhone());
pstmt.setString(3, bean.getAddress());
pstmt.setString(4, bean.getTeam());
pstmt.setInt(5, bean.getId());
// insert, update, delete 실행을 하면 적용된 레코드 개수 리턴
int cnt = pstmt.executeUpdate();
if (cnt == 1)
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt);
}
return flag;
}
// 삭제 : delete -db2
public boolean delete(int id) {
Connection con = null;
PreparedStatement pstmt = null;
String sql = null;
boolean flag = false;
try {
con = pool.getConnection();
sql = "delete from tblMember where id =?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, id);
if(pstmt.executeUpdate()==1)
flag=true;
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt);
}
return flag;
}
// 주소 검색(우편번호 검색): select -db1
public Vector<ZipcodeBean> zipcodeSearch(String area3) {
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
Vector<ZipcodeBean> vlist = new Vector<ZipcodeBean>();
try {
con = pool.getConnection();
sql = "select * from tblZipcode " + "where area3 like ?";
pstmt = con.prepareStatement(sql);
// like '%강남대로%'
pstmt.setString(1, "%" + area3 + "%");
rs = pstmt.executeQuery();
while (rs.next()) {
ZipcodeBean bean = new ZipcodeBean();
// select 뒤에 가져오는 컬럼의 index
bean.setZipcode(rs.getString(1));
bean.setArea1(rs.getString(2));
bean.setArea2(rs.getString(3));
bean.setArea3(rs.getString(4));
vlist.addElement(bean);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt, rs);
}
return vlist;
}
public static void main(String[] args) {
MemberMgr mgr = new MemberMgr();
MemberBean bean = new MemberBean();
bean.setName("강호동");
bean.setPhone("010-5555-9999");
bean.setAddress("부산시 동래구");
bean.setTeam("부경대");
boolean flag = mgr.insert(bean);
System.out.println(flag);
Vector<MemberBean> vlist = mgr.selectAll();
for (int i = 0; i < vlist.size(); i++) {
MemberBean bean1 = vlist.get(i);
System.out.println(bean1.getId() + "\t" + bean1.getName() + "\t" + bean1.getPhone() + "\t"
+ bean1.getAddress() + "\t" + bean1.getTeam());
}
}
}
package member;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MemberAWT extends MFrame implements ActionListener {
JButton b1, b2, b3, b4;
List list;
JLabel label;
JTextField tf1, tf2, tf3, tf4;
JPanel p1, p2, p3;
JButton insBtn, upBtn, zipBtn;
Vector<MemberBean> vlist;
MemberMgr mgr;
int id;
ZipcodeFrame zf;
public MemberAWT() {
super(300, 450);
setTitle("Member MAG Ver1.0");
mgr = new MemberMgr();
p1 = new JPanel();
p2 = new JPanel();
p3 = new JPanel();
label = new JLabel("");
viewList();
add(label, BorderLayout.NORTH);
b1 = new JButton("수정");
b2 = new JButton("삭제");
b3 = new JButton("입력");
b4 = new JButton("리스트");
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
p1 = new JPanel();
p1.add(b1);
p1.add(b2);
p1.add(b3);
p1.add(b4);
add(p1, BorderLayout.SOUTH);
validate();
}
public void viewList() {
label.setOpaque(true);
label.setText("NO NAME PHONE TEAM");
label.setBackground(Color.CYAN);
vlist = mgr.selectAll();
// System.out.println(vlist.size());
list = new List(vlist.size(), false);
for (int i = 0; i < vlist.size(); i++) {
MemberBean bean = vlist.get(i);
String str = (i + 1)/* bean.getId() */ + " " + bean.getName().trim() + " " + bean.getPhone().trim()
+ " " + bean.getTeam();
list.add(str);
}
int len = list.getItemCount();
if (len > 0)
list.select(0);
add(list, BorderLayout.CENTER);
}
public void insertForm() {
label.setText("회원입력폼");
label.setBackground(Color.GRAY);
p3.setLayout(new GridLayout(6, 1));
JPanel p5 = new JPanel();
p5.add(new JLabel("NAME :"));
tf1 = new JTextField(20);
p5.add(tf1);
p3.add(p5);
JPanel p6 = new JPanel();
p6.add(new JLabel("PHONE :"));
tf2 = new JTextField(20);
p6.add(tf2);
p3.add(p6);
JPanel p7 = new JPanel();
p7.add(new JLabel("TEAM :"));
tf3 = new JTextField(20);
p7.add(tf3);
p3.add(p7);
JPanel p8 = new JPanel();
zipBtn = new JButton("우편번호");
p8.add(zipBtn);
p3.add(p8);
JPanel p9 = new JPanel();
p9.add(new JLabel("주소 :"));
tf4 = new JTextField(20);
zipBtn.addActionListener(this);
p9.add(tf4);
p3.add(p9);
JPanel p10 = new JPanel();
insBtn = new JButton("저장");
insBtn.addActionListener(this);
p10.add(insBtn);
p3.add(p10);
add(p3, BorderLayout.CENTER);
}
public void updateForm(MemberBean bean) {
label.setText("회원수정폼");
label.setBackground(Color.YELLOW);
p3.setLayout(new GridLayout(6, 1));
id = bean.getId();
JPanel p4 = new JPanel();
p4.add(new JLabel("NAME :"));
tf1 = new JTextField(bean.getName(), 20);
p4.add(tf1);
p3.add(p4);
JPanel p5 = new JPanel();
p5.add(new JLabel("PHONE :"));
tf2 = new JTextField(bean.getPhone(), 20);
p5.add(tf2);
p3.add(p5);
JPanel p6 = new JPanel();
p6.add(new JLabel("TEAM :"));
tf3 = new JTextField(bean.getTeam(), 20);
p6.add(tf3);
p3.add(p6);
JPanel p7 = new JPanel();
zipBtn = new JButton("우편번호");
p7.add(zipBtn);
p3.add(p7);
JPanel p8 = new JPanel();
p8.add(new JLabel("주소 :"));
tf4 = new JTextField(bean.getAddress(), 20);
zipBtn.addActionListener(this);
p8.add(tf4);
p3.add(p8);
JPanel p9 = new JPanel();
upBtn = new JButton("수정저장");
upBtn.addActionListener(this);
p9.add(upBtn);
p3.add(p9);
add(p3, BorderLayout.CENTER);
}
@Override
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
if (obj == b1/* 수정버튼 */) {
int i = list.getSelectedIndex();
MemberBean bean = vlist.get(i);
list.removeAll();
remove(list);
updateForm(bean);
} else if (obj == b2/* 삭제버튼 */) {
int i = list.getSelectedIndex();
MemberBean bean = vlist.get(i);
if (mgr.delete(bean.getId())) {
p3.removeAll();
remove(p3);
list.removeAll();
remove(list);
vlist.removeAllElements();
viewList();
validate();
}
} else if (obj == b3/* 입력버튼 */) {
p3.removeAll();
list.removeAll();
remove(list);
insertForm();
} else if (obj == b4/* 리스트버튼 */) {
p3.removeAll();
remove(p3);
list.removeAll();
remove(list);
vlist.removeAllElements();
viewList();
} else if (obj == zipBtn) {
if (zf == null)
zf = new ZipcodeFrame(this);
else
zf.setVisible(true);
} else if (obj == insBtn/* 입력저장 */) {
MemberBean bean = new MemberBean();
bean.setName(tf1.getText());
bean.setPhone(tf2.getText());
bean.setTeam(tf3.getText());
bean.setAddress(tf4.getText());
if (mgr.insert(bean)) {
p3.removeAll();
remove(p3);
vlist.removeAllElements();
viewList();
}
} else if (obj == upBtn/* 수정저장 */) {
MemberBean bean = new MemberBean();
bean.setId(id);
bean.setName(tf1.getText());
bean.setPhone(tf2.getText());
bean.setTeam(tf3.getText());
bean.setAddress(tf4.getText());
if (mgr.update(bean)) {
p3.removeAll();
remove(p3);
vlist.removeAllElements();
viewList();
}
}
}// --actionPerformed
public static void main(String[] args) {
new MemberAWT();
}
}

package graphics;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
public class imageViewsEx1 extends MFrame {
Image img;
public imageViewsEx1() {
super(500, 350);
img = Toolkit.getDefaultToolkit().getImage("graphics/aaa.jpg");
}
@Override
public void paint(Graphics g) {
g.drawImage(img, 0, 0, this);
}
public static void main(String[] args) {
new imageViewsEx1();
}
}
출력 결과: 500x350크기의 프레임 aaa.jpg 이미지 출력
package graphics;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class imageViewsEx2 extends MFrame implements ActionListener {
Image img[] = new Image[3];
Button btn[] = new Button[4];
String str[] = { "첫번째", "두번째", "세번째", "랜덤" };
Random r = new Random();
int idx = 0;
public imageViewsEx2() {
super(550, 300);
Panel p = new Panel();
p.setLayout(new GridLayout(4, 1));
for (int i = 0; i < btn.length; i++) {
btn[i] = new Button(str[i]);
btn[i].addActionListener(this);
p.add(btn[i]);
}
for (int i = 0; i < img.length; i++) {
img[i] = Toolkit.getDefaultToolkit().getImage("graphics/aaa" + i + ".png");
}
add(p, BorderLayout.EAST);
validate();
}
@Override
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
if(obj==btn[0]) idx=0;
else if(obj==btn[1]) idx=1;
else if(obj==btn[2]) idx=2;
else if(obj==btn[3]) idx=r.nextInt(3);//0~2
repaint();//내부적으로 paint 호출
}
@Override
public void paint(Graphics g) {
setTitle("graphics/aaa" + idx + ".png");
g.drawImage(img[idx], 0, 0, this);
}
public static void main(String[] args) {
new imageViewsEx2();
}
}

package graphics;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class imageViewsEx3 extends JFrame implements ActionListener {
Image img;
JButton btn[] = new JButton[6];
String str[] = { "정상그림", "일부그림", "축소그림", "좌우뒤집기", "상하뒤집기", "전부뒤집기" };
int idx;
String name;
static final int SHOW_NORM = 0;//정상그림
static final int SHOW_PART = 1;//일부그림
static final int SHOW_SCALE = 2;//축소그림
static final int SHOW_HORIZONTAL = 3;//좌우뒤집기
static final int SHOW_VERTICAL = 4;//상하뒤집기
static final int SHOW_ALL = 5;//전부뒤집기
public imageViewsEx3(String name) {
setSize(600,400);
this.name = name;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel();
for (int i = 0; i < btn.length; i++) {
p.add(btn[i]=new JButton(str[i]));
btn[i].addActionListener(this);
}
img = Toolkit.getDefaultToolkit().getImage("graphics/"+name);
add(p,BorderLayout.SOUTH);
setResizable(false);
setVisible(true);
idx = SHOW_NORM;
}
@Override
public void paint(Graphics g) {
super.paint(g);
setTitle(name+"-"+str[idx]);
int iw = img.getWidth(this);
int ih = img.getHeight(this);
switch(idx) {
case SHOW_NORM:
g.drawImage(img, 0, 0, iw, ih,/*컨테이너 좌표*/
0, 0, iw, ih,/*이미지 좌표*/ this);
break;
case SHOW_PART:
g.drawImage(img, 100, 100, 300, 300,/*컨테이너 좌표*/
220, 20, 420, 220,/*이미지 좌표*/ this);
break;
case SHOW_SCALE:
g.drawImage(img, 0, 0, iw/2, ih/2,/*컨테이너 좌표*/
0, 0, iw, ih,/*이미지 좌표*/ this);
break;
case SHOW_HORIZONTAL:
g.drawImage(img, iw, 0, 0, ih,/*컨테이너 좌표*/
0, 0, iw, ih,/*이미지 좌표*/ this);
break;
case SHOW_VERTICAL:
g.drawImage(img, 0, ih, iw, 0,/*컨테이너 좌표*/
0, 0, iw, ih,/*이미지 좌표*/ this);
break;
case SHOW_ALL:
g.drawImage(img, iw, ih, 0, 0,/*컨테이너 좌표*/
0, 0, iw, ih,/*이미지 좌표*/ this);
break;
}
}
@Override
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
for (int i = 0; i < btn.length; i++) {
if(obj==btn[i]) {
idx=i;
break;
}
}
repaint();
}
public static void main(String[] args) {
new imageViewsEx3("aaa.png");
}
}

package graphics;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class DrawAllEx1 extends MFrame implements ActionListener {
Panel p1, p2;
int mode = 1/* 0-선,1-사각형,2-원 */, color;
Label l[];
Checkbox fillcb;
Checkbox cb[] = new Checkbox[3];
CheckboxGroup cbg;
TextField tf[];
Button b[] = new Button[4];
Button btn;
MCanvas canvas;
String sl[] = { "선", "사각형", "원", "랜덤색" };
String cl[] = { "R", "G", "B" };
String ll[] = { "X1", "Y1", "X2", "Y2 " };
String rl[] = { "X", "Y", "W", "H " };
String ol[] = { "X", "Y", "너비", "높이" };
public DrawAllEx1() {
super(600, 300);
setTitle("선그리기");
makeAWT();
p1 = new Panel();
p1.setLayout(new GridLayout(4, 1));
for (int i = 0; i < b.length; i++) {
p1.add(b[i]);
}
add(p1, BorderLayout.EAST);
p2.setBackground(Color.yellow);
for (int i = 0; i < l.length; i++) {
p2.add(l[i]);
p2.add(tf[i]);
}
for (int i = 0; i < cb.length; i++) {
p2.add(cb[i]);
}
p2.add(btn);
selectPanel(mode);
add(p2, BorderLayout.SOUTH);
add(canvas = new MCanvas());
validate();
}
public void selectPanel(int mode) {
setTitle(sl[mode] + "그리기");
switch (mode) {
case 0:
p2.setBackground(Color.YELLOW);
for (int i = 0; i < l.length; i++) {
l[i].setText(ll[i]);
l[i].setBackground(Color.YELLOW);
}
for (int i = 0; i < cb.length; i++) {
cb[i].setBackground(Color.YELLOW);
}
p2.remove(fillcb);
break;
case 1:
p2.remove(fillcb);
p2.setBackground(Color.PINK);
for (int i = 0; i < l.length; i++) {
l[i].setText(rl[i]);
l[i].setBackground(Color.PINK);
}
for (int i = 0; i < cb.length; i++) {
cb[i].setBackground(Color.PINK);
}
p2.add(fillcb, 8);
break;
case 2:
p2.remove(fillcb);
p2.setBackground(Color.CYAN);
for (int i = 0; i < l.length; i++) {
l[i].setText(ol[i]);
l[i].setBackground(Color.CYAN);
}
for (int i = 0; i < cb.length; i++) {
cb[i].setBackground(Color.CYAN);
}
p2.add(fillcb, 8);
break;
}
}
public void makeAWT() {
p1 = new Panel();
p2 = new Panel();
l = new Label[4];
for (int i = 0; i < l.length; i++) {
l[i] = new Label();
}
for (int i = 0; i < b.length; i++) {
b[i] = new Button(sl[i]);
b[i].addActionListener(this);
}
tf = new TextField[4];
for (int i = 0; i < tf.length; i++) {
tf[i] = new TextField("30", 3);
}
fillcb = new Checkbox("채우기");
cbg = new CheckboxGroup();
for (int i = 0; i < cb.length; i++) {
cb[i] = new Checkbox(cl[i], cbg, false);
}
btn = new Button("그리기");
btn.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
for (int i = 0; i < b.length - 1; i++) {
if (obj == b[i]) {
mode = i;
selectPanel(mode);
break;
}
} // --for
if (obj == b[3]/* 랜덤 */) {
} else if (obj == btn/* 그리기 */) {
/* 채우기, RGB(color): 체크 후 repaint */
Checkbox cbx = cbg.getSelectedCheckbox();
for (int i = 0; i < cb.length; i++) {
if (cbx == cb[i]) {
color = i;
break;
} // --if
} // --for
canvas.repaint();
} // --if
}
@Override
public void paint(Graphics g) {
}
class MCanvas extends Canvas {
@Override
public void paint(Graphics g) {
// 4개의 tf 값을 정수형으로 리턴
int[] tf1 = new int[4];
for (int i = 0; i < tf.length; i++) {
tf1[i] = Integer.valueOf(tf[i].getText());
}
// color : 0(R), 1(G), 2(B) 셋팅
switch (color) {
case 0:
g.setColor(Color.RED);
break;
case 1:
g.setColor(Color.GREEN);
break;
case 2:
g.setColor(Color.BLUE);
break;
}
// mode : 0: 선그리기 1: 사각형 2: 원그리기(채우기)
switch (mode) {
case 0:
g.drawLine(tf1[0], tf1[1], tf1[2], tf1[3]);
break;
case 1:
if (fillcb.getState())
g.fillRect(tf1[0], tf1[1], tf1[2], tf1[3]);
else
g.drawRect(tf1[0], tf1[1], tf1[2], tf1[3]);
break;
case 2:
if (fillcb.getState())
g.fillOval(tf1[0], tf1[1], tf1[2], tf1[3]);
else
g.drawOval(tf1[0], tf1[1], tf1[2], tf1[3]);
break;
}
}
}
public static void main(String[] args) {
new DrawAllEx1();
}
}
