23.01.25(Java)

MH S·2023년 1월 25일

Java

목록 보기
10/16

MVC 디자인 패턴
M: DB, V: View, C: Controller

DB 예제


1. MemberMgr (DB Insert, update, delete 기능 예제)
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());
		}
	}
}

2. MemberAWT (Frame 에 데이터 수정, 입력, 저장, 삭제하는 예제)
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();
	}

}

그래픽

  1. 프레임안에 이미지 출력 예제
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 이미지 출력

  1. 버튼 누를시 이미지 랜덤 출력
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();
	}
}



  1. JFrame 을 이용한 다양한 이미지 뒤집기 예제
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");
	}
}



  1. 그래픽을 이용해 도형 그리기
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();
	}
}

0개의 댓글