본문 바로가기
프로그래밍/Oracle

2021년 9월 9일 - JDBC : JDBC Swing (4) : 작은 프로젝트 예시

by 철제백조 2021. 9. 9.

현재 패키지 경로

 

        File file = new File(".");
        String rootPath = file.getAbsolutePath();
        System.out.println("현재 프로젝트의 경로 : "+rootPath );

 


 

◎ Oracle Table

 

 


 

◎ 구현 결과물

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

Main

 

package quiz0908;

import java.awt.Color;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class HelloMain extends JFrame implements ActionListener{

	Container cp;
	
	JButton btnAdd, btnList, btnUpdate, btnDel;
	
	JLabel lbl1, lbl2, lbl3, lbl4;
	
	
	////////////////////////////////
	//기본
	public HelloMain() {
		
		super("Hello");
		
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setBounds(800, 100, 250, 300);
		this.getContentPane().setBackground(Color.white);
		//디자인 보이게 하기
		initDesign();
		this.setVisible(true);
		
	}
	
	
	////////////////////////////////////////////
	public void initDesign() {
		
		//Grid Layout
		this.setLayout(new GridLayout(2,2));
		
		//버튼 생성
		btnAdd = new JButton("1.회원가입");
		btnList = new JButton("2.회원명단");
		btnUpdate = new JButton("3.회원수정");
		btnDel = new JButton("4.회원삭제");
		
		//버튼색 지정
		btnAdd.setBackground(Color.pink);
		btnList.setBackground(Color.orange);
		btnUpdate.setBackground(Color.yellow);
		btnDel.setBackground(Color.green);

		//버튼 기능 추가
		btnAdd.addActionListener(this);
		btnList.addActionListener(this);
		btnUpdate.addActionListener(this);
		btnDel.addActionListener(this);
		
		//버튼 추가
		this.add(btnAdd);
		this.add(btnList);
		this.add(btnUpdate);
		this.add(btnDel);
	
	}
	
	
	////////////////////////////////////////////
	//오버라이딩
	@Override
	public void actionPerformed(ActionEvent e) {
		
		//버튼 객체 생성
		Object ob = e.getSource();
		
		if (ob==btnAdd) {
			HelloInsertForm helloInsertForm = new HelloInsertForm();
			
		} else if (ob==btnList) {
			HelloListForm helloListForm = new HelloListForm();
			
		} else if (ob==btnUpdate) {
			
			String num = JOptionPane.showInputDialog("수정할 회원번호를 입력해주세요");
			
			//cancel 누를 경우
			if(num==null) {
				return;
			}
			
			//num값을 형변환한 후, HelloModel의 getOnedate로 넘겨서 dto의 값을 받아옴
			HelloDTO dto = new HelloModel().getOneData(Integer.parseInt(num));

			
			if (dto.getNum()==null) {
				System.out.println("리스트에 없는 번호");
				
				//목록에 없는 번호라고 경고창 
				JOptionPane.showMessageDialog(this, "존재하지 않는 회원번호입니다");
				//리스트에 번호가 존재하지 않을 때, 수정용 팝업 안보이게 하기
				return;
				
			} else {
				System.out.println("리스트에 존재하는 번호");
				
				//리스트에 번호가 존재할 때, 수정용 팝업 보이게 하기
	
			}
			
			
			//update 메서드 호출
			HelloUpdateForm helloUpdateForm = new HelloUpdateForm();
			
			helloUpdateForm.num = dto.getNum();
			helloUpdateForm.tfName.setText(dto.getName());
			helloUpdateForm.tfAddr.setText(dto.getAddr());
			
			
		} else if (ob==btnDel) {
			HelloDeleteForm helloDeleteForm = new HelloDeleteForm();
			
		}
		
	}
	
	
	////////////////////////////////////////////
	public static void main(String[] args) {
		 
		new HelloMain();

	}

}

 


 

DTO

 

package quiz0908;

import java.util.Date;

public class HelloDTO {
	
	private String num;
	private String name;
	private String addr;
	private Date sdate;
	
	//Worker 메서드
	public String getNum() {
		return num;
	}
	public void setNum(String num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public Date getSdate() {
		return sdate;
	}
	public void setSdate(Date sdate) {
		this.sdate = sdate;
	}

	
	
}

 


 

Model

 

package quiz0908;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import day0907.ShopDTO;
import quiz.DbConn;

public class HelloModel {
	
	//커넥션 기본
	DbConn db = new DbConn();
	
	
	///////////////////////////////////////////
	//Select
	//Vector DTO 값을 리턴값으로 값을 출력하는 내용 - 이를 통해 테이블을 통해 전체 출력이 가능하게함
	public Vector<HelloDTO> getAllData() {
		
		//데이터들을 담을 백터값 선언
		Vector <HelloDTO> list = new Vector<HelloDTO>();
		
		//연결
		Connection conn = db.getLoclaConnection();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		//sql문
		String sql = "Select * from Hello order by num";
		
		//후속
		try {
			pstmt = conn.prepareStatement(sql);
			
			rs = pstmt.executeQuery();
			
			while (rs.next()) {
				
				//DTO객체 생성
				HelloDTO dto = new HelloDTO();
				
				//rs의 출력값을 넣어줌
				dto.setNum(rs.getString("num"));
				dto.setName(rs.getString("name"));
				dto.setAddr(rs.getString("addr"));
				dto.setSdate(rs.getDate("sdate"));
				
				//리스트에 추가
				list.add(dto);
			}	
		} catch (SQLException e) {

		} finally {
			db.dbClose(rs, pstmt, conn);
		}
		
		return list;
		
	}
	
	
	///////////////////////////////////////////
	//Insert
	//입력한 DTO를 인자값으로 전달받는다
	public void insertHello(HelloDTO dto) {
		
		//DCL의 기본 기능들을 넣어놓는 것이기에 접속은 필수
		Connection conn = db.getLoclaConnection();
		PreparedStatement pstmt = null;
		
		//sql
		String sql = "insert into hello values(seq_hello.nextval,?,?,sysdate)";
		
		
		//후속
		try {
			pstmt = conn.prepareStatement(sql);
			
			//DTO 객체는 이미 받았으므로 따로 생성할 필요없음
			
			//값 배분
			pstmt.setString(1, dto.getName());
			pstmt.setString(2, dto.getAddr());
			
			//업데이트
			pstmt.execute();
			
		} catch (SQLException e) {
			
		} finally {
			db.dbClose(pstmt, conn);
		}
		
	}

	
	///////////////////////////////////////////
	//Update - 가장 마지막에 작업하는 게 좋다
	//1.getOneData
	//한 가지 값을 읽어서 rs를 통해 DTO에 할당할 것임 - 삭제할 번호를 받는다
	public HelloDTO getOneData(int num) {
		
		//DTO에 담기 위해 객체 호출
		HelloDTO dto = new HelloDTO();
		
		//기본
		Connection conn = db.getLoclaConnection();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		//sql문
		String sql = "Select * from Hello where num = ?";
		
		
		//후속
		try {
			pstmt = conn.prepareStatement(sql);
			
			//값할당
			pstmt.setInt(1, num);
						
			
			//rs로 쿼리문 확정
			rs = pstmt.executeQuery();
			
			
			//단일값 출력하면서 rs의 값을 dto값에 담아주기
			//단일값은 if로 출력
			if (rs.next()) {
				
				dto.setNum(rs.getString("num"));
				dto.setName(rs.getString("name"));
				dto.setAddr(rs.getString("addr"));
				dto.setSdate(rs.getDate("sdate"));
			}
			
			
		} catch (SQLException e) {
			
		} finally {
			db.dbClose(rs, pstmt, conn);
		}
		
		//dto값 반환
		return dto;
		
	}
	
	
	//2.updateHello
	//앞에서 입력한 DTO값을 받아서 작업
	public void updateHello(HelloDTO dto) {
		
		//기본
		Connection conn = db.getLoclaConnection();
		PreparedStatement pstmt = null;
		
		//sql문
		String sql = "update Hello set name=?, addr=? where num=?";
				
		
		
		//후속
		try {
			pstmt = conn.prepareStatement(sql);
			
			//!!!!!!!!!!!!
			//dto에서 받은 값들을 토대로 sql문의 ? 값을 할당함
			pstmt.setString(1, dto.getName());
			pstmt.setString(2, dto.getAddr());
			pstmt.setString(3, dto.getNum());
			
			
			//업데이트
			pstmt.execute();
			
		} catch (SQLException e) {
			
		} finally {
			db.dbClose(pstmt, conn);
		}
	} 
	
	
	
	///////////////////////////////////////////
	//Delete
	//삭제받을 넘버값을 인자값으로 입력받는다
	//정상 삭제되었는지 아닌지 여부를 int값으로 리턴한다.
	public int deleteHello(int num) {
		
		//기본
		Connection conn = db.getLoclaConnection();
		PreparedStatement pstmt = null;
		
		//sql
		String sql = "delete from Hello where num = ?";
		
		int a = 0;
		
		//후속
		try {
			pstmt = conn.prepareStatement(sql);
			
			//값 할당
			pstmt.setInt(1, num);
			
			//업데이트와 동시에 변수 할당
			a = pstmt.executeUpdate();
			
			//정상삭제 여부를 알려주는 int 값을 반환
			
		} catch (SQLException e) {
			
		} finally {
			db.dbClose(pstmt, conn);
		} 
		
		//우선 a를 0으로 할당해주어야함
		return a;
		
	}


	
	
	///////////////////////////////////////////
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

 


 

List Form

 

package quiz0908;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class HelloListForm extends JFrame implements ActionListener{

	
	//DCL 메서드 호출을 위해 모아놓았던 객체 생성
	HelloModel helloModel = new HelloModel();
	
	//입출력을 위한 테이블 기본 모델과 테이블 생성
	DefaultTableModel model;
	JTable table;
	
	//출력을 위해 Vector에 저장된 값 호출 - DTO를 객체로 생성하는 게 아니라, Vector가 DTO를 인자로 받음
	Vector<HelloDTO> list;
	
	
	//새로고침 버튼
	JButton btnRefresh;
	
	
	///////////////////////////////////////////
	//기본
	public HelloListForm() {
		
		super("회원목록");	
		this.setBounds(800, 100, 700, 400);
		this.getContentPane().setBackground(Color.orange);
		initDesign();
		//this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	
	/////////////////////////////////////////////
	//기본 디자인
	public void initDesign() {
		
		//기본 레이아웃
		this.setLayout(null);
		
		//이미 HelloModel에서 getAllData이라는 이름으로
		//Select 메서드를 return값을 Vector로 하는 list를 만들었다.
		//여기에 접속 메서드를 비롯해 각 rs 값이 Vector로 저장되어있다.
		//따라서 이 값을 불러와야한다.
		//이 값이 곧 여기서 쓰일 Vector의 list 값과 같다.
		//!!!!!!!!!!!!
		list = helloModel.getAllData();
		
		
		//테이블 타이틀
		String [] title = {"회원번호", "회원명", "지역", "가입일자"};
		
		//테이블 추가
		model = new DefaultTableModel(title, 0);
		table = new JTable(model);
		//JScrollPane
		JScrollPane js = new JScrollPane(table);
		js.setBounds(10, 10, 665, 260);
		this.add(js);
		
		//버튼 추가
		btnRefresh = new JButton("새로고침");
		btnRefresh.setBounds(250, 300, 150, 30);
		btnRefresh.addActionListener(this);
		this.add(btnRefresh);
		
		//테이블 출력
		showTable();
	}
	
	////////////////////////////////////////////
	//테이블 출력
	//!!!!!!!! 테이블 출력은 따로 메서드를 만들어야 함
	public void showTable() {
		
		//모델 초기화 - 손님상 차리기
		model.setRowCount(0);
		
		//테이블에 Vector로 저장된 값들 dto 객체를 이용해 일제히 출력
		//Vector<HelloDTO>를 담고 있던 Vetor값 일제 출력
		//출력할땐 클래스가 아니라 String으로 바꾸어줘야하기 때문
		for (HelloDTO dto : list) {
			
			Vector<String> data = new Vector<String>();
			
			//Vector에 데이터주기
			data.add(dto.getNum());
			data.add(dto.getName());
			data.add(dto.getAddr());
			//!!!!!!!!!!!!!!!!!!!!!!!!
			//Vector가 String 형으로 선언되었기에 int나 data 형을 바꾸려면 String value of 사용 
			data.add(String.valueOf(dto.getSdate()));
			
			//model에 넣어주기
			model.addRow(data);
		}
		
	}
	
	
	/////////////////////////////////////////////
	//새로고침 버튼 메서드
	@Override
	public void actionPerformed(ActionEvent e) {
		
		//단일 버튼일 경우, Object 안만들어도 된다!!!!!
		
		//버튼을 누르면 다시 list의 값을 초기화
		list = helloModel.getAllData();
		
		//이걸 기반으로 다시 테이블 출력
		showTable();
		
	}
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		new HelloListForm();

	}

}

 


 

Insert Form

 

package quiz0908;

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;

public class HelloInsertForm extends JFrame implements ActionListener{

	//모델들
	HelloModel helloModel = new HelloModel();
	
	Container cp;
	
	JLabel lbl1, lbl2, lbl3;
	JTextField tfName, tfAddr, tfSdate;
	
	JButton btnAdd;
	
	JPanel panel;
	
	
	////////////////////////////////////////
	//기본
	public HelloInsertForm() {
		super("회원추가");
		
		this.setBounds(800, 300, 400, 400);
		this.getContentPane().setBackground(Color.pink);
		initDesign();
		//this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	////////////////////////////////////////
	//디자인
	public void initDesign() {
		
		this.setLayout(null);
		
		//라벨추가
		lbl1 = new JLabel("이름", lbl1.CENTER);
		lbl2 = new JLabel("지역", lbl2.CENTER);
		lbl3 = new JLabel("가입일", lbl3.CENTER);
		
		//라벨크기
		lbl1.setBounds(50, 30, 50, 50);
		lbl2.setBounds(50, 130, 50, 50);
		lbl3.setBounds(50, 230, 50, 50);
		
		//라벨보더
		lbl1.setBorder(new LineBorder(Color.blue));
		lbl1.setFont(new Font("맑은 고딕", Font.BOLD, 18));
		lbl2.setBorder(new LineBorder(Color.blue));
		lbl2.setFont(new Font("맑은 고딕", Font.BOLD, 18));
		lbl3.setBorder(new LineBorder(Color.blue));
		lbl3.setFont(new Font("맑은 고딕", Font.BOLD, 15));
		
		//라벨추가
		this.add(lbl1);
		this.add(lbl2);
		this.add(lbl3);
		
		
		//Textfield 추가
		tfName = new JTextField();
		tfAddr = new JTextField();
		tfSdate = new JTextField();
		
		//크기
		tfName.setBounds(130, 30, 220, 50);
		tfAddr.setBounds(130, 130, 220, 50);
		tfSdate.setBounds(130, 230, 220, 50);
		
		//더하기
		this.add(tfName);
		this.add(tfAddr);
		this.add(tfSdate);
		
		
		//날짜 textfield에 오늘날짜 출력하기
		//!!!!!!!!!!!!!!!!!!!!!!!!!!
		SimpleDateFormat sysdate = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분");
		Calendar time = Calendar.getInstance();
		String todayDate = sysdate.format(time.getTime());
		tfSdate.setText(todayDate);
		
		
		//버튼추가
		btnAdd = new JButton("회원가입");
		btnAdd.setBounds(150, 300, 100, 50);
		btnAdd.addActionListener(this);
		this.add(btnAdd);

	}
	
	
	////////////////////////////////////////
	//버튼 기능
	@Override
	public void actionPerformed(ActionEvent e) {
		
		//버튼 하나면 Object 생성안해도 됨
		
		//값을 넣어줄 DTO 객체 생성
		HelloDTO dto = new HelloDTO();
		
			
			//단순 insert는 num값이 필요없다
			dto.setName(tfName.getText());
			dto.setAddr(tfAddr.getText());
			
			//HelloModel 클래스의 insert 객체 호출
			helloModel.insertHello(dto);
			
			//추가하면 현재창 닫기
			this.setVisible(false);

		
	}
	
	
//	////////////////////////////////////////
//	public static void main(String[] args) {
//		// TODO Auto-generated method stub
//		new HelloInsertForm();
//
//	}

}

 


 

Update Form

 

package quiz0908;

import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;

public class HelloUpdateForm extends JFrame implements ActionListener{

	//모델들
	HelloModel helloModel = new HelloModel();
	
	//전역변수에서 수정할 값의 num을 정의
	String num;
	
	Container cp;
	
	JLabel lbl1, lbl2, lbl3;
	JTextField tfName, tfAddr, tfSdate;
	
	JButton btnAdd;
	
	JPanel panel;
	
	
	////////////////////////////////////////
	//기본
	public HelloUpdateForm() {
		super("회원정보 수정");
		
		this.setBounds(800, 300, 400, 400);
		this.getContentPane().setBackground(Color.yellow);
		initDesign();
		//this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	////////////////////////////////////////
	//디자인
	public void initDesign() {
		
		this.setLayout(null);
		
		//라벨추가
		lbl1 = new JLabel("이름", lbl1.CENTER);
		lbl2 = new JLabel("지역", lbl2.CENTER);
		lbl3 = new JLabel("가입일", lbl3.CENTER);
		
		//라벨크기
		lbl1.setBounds(50, 30, 50, 50);
		lbl2.setBounds(50, 130, 50, 50);
		lbl3.setBounds(50, 230, 50, 50);
		
		//라벨보더
		lbl1.setBorder(new LineBorder(Color.blue));
		lbl1.setFont(new Font("맑은 고딕", Font.BOLD, 18));
		lbl2.setBorder(new LineBorder(Color.blue));
		lbl2.setFont(new Font("맑은 고딕", Font.BOLD, 18));
		lbl3.setBorder(new LineBorder(Color.blue));
		lbl3.setFont(new Font("맑은 고딕", Font.BOLD, 15));
		
		//라벨추가
		this.add(lbl1);
		this.add(lbl2);
		this.add(lbl3);
		
		
		//Textfield 추가
		tfName = new JTextField();
		tfAddr = new JTextField();
		tfSdate = new JTextField();
		
		//크기
		tfName.setBounds(130, 30, 220, 50);
		tfAddr.setBounds(130, 130, 220, 50);
		tfSdate.setBounds(130, 230, 220, 50);
		
		//더하기
		this.add(tfName);
		this.add(tfAddr);
		this.add(tfSdate);
		
		
		//날짜 textfield에 오늘날짜 출력하기
		//!!!!!!!!!!!!!!!!!!!!!!!!!!
		SimpleDateFormat sysdate = new SimpleDateFormat("yyyy년 MM월 dd일 HH시 mm분");
		Calendar time = Calendar.getInstance();
		String todayDate = sysdate.format(time.getTime());
		tfSdate.setText(todayDate);
		
		
		//버튼추가
		btnAdd = new JButton("정보수정");
		btnAdd.setBounds(150, 300, 100, 50);
		btnAdd.addActionListener(this);
		this.add(btnAdd);

	}
	
	
	////////////////////////////////////////
	//버튼 기능
	@Override
	public void actionPerformed(ActionEvent e) {
		
		//버튼 하나면 Object 생성안해도 됨
		
		//값을 넣어줄 DTO 객체 생성
		HelloDTO dto = new HelloDTO();
		
		
		//수정을 위해 num값을 넘겨받아야만 한다.
		dto.setNum(num);
			
		//단순 insert는 num값이 필요없다
		dto.setName(tfName.getText());
		dto.setAddr(tfAddr.getText());
			
		//HelloModel 클래스의 insert 객체 호출
		helloModel.updateHello(dto);
			
		//추가하면 현재창 닫기
		this.setVisible(false);

		
	}
	
	
//	////////////////////////////////////////
//	public static void main(String[] args) {
//		// TODO Auto-generated method stub
//		new HelloInsertForm();
//
//	}

}

 


 

Delete Form

 

package quiz0908;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Date;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class HelloDeleteForm extends JFrame implements ActionListener{

	
	//DCL 메서드 호출을 위해 모아놓았던 객체 생성
	HelloModel helloModel = new HelloModel();
	
	//입출력을 위한 테이블 기본 모델과 테이블 생성
	DefaultTableModel model;
	JTable table;
	
	//출력을 위해 Vector에 저장된 값 호출 - DTO를 객체로 생성하는 게 아니라, Vector가 DTO를 인자로 받음
	Vector<HelloDTO> list;
	
	
	//새로고침 버튼
	JButton btnDel;
	
	
	///////////////////////////////////////////
	//기본
	public HelloDeleteForm() {
		
		super("회원목록");	
		this.setBounds(800, 100, 700, 400);
		this.getContentPane().setBackground(Color.green);
		initDesign();
		//this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	
	/////////////////////////////////////////////
	//기본 디자인
	public void initDesign() {
		
		//기본 레이아웃
		this.setLayout(null);
		
		//이미 HelloModel에서 getAllData이라는 이름으로
		//Select 메서드를 return값을 Vector로 하는 list를 만들었다.
		//여기에 접속 메서드를 비롯해 각 rs 값이 Vector로 저장되어있다.
		//따라서 이 값을 불러와야한다.
		//이 값이 곧 여기서 쓰일 Vector의 list 값과 같다.
		//!!!!!!!!!!!!
		list = helloModel.getAllData();
		
		
		//테이블 타이틀
		String [] title = {"회원번호", "회원명", "지역", "가입일자"};
		
		//테이블 추가
		model = new DefaultTableModel(title, 0);
		table = new JTable(model);
		//JScrollPane
		JScrollPane js = new JScrollPane(table);
		js.setBounds(10, 10, 665, 260);
		this.add(js);
		
		//버튼 추가
		btnDel = new JButton("삭제");
		btnDel.setBounds(250, 300, 150, 30);
		btnDel.addActionListener(this);
		this.add(btnDel);
		
		//테이블 출력
		showTable();
		
	}
	
	
	////////////////////////////////////////////
	//테이블 출력
	//!!!!!!!! 테이블 출력은 따로 메서드를 만들어야 함
	public void showTable() {
		
		//모델 초기화 - 손님상 차리기
		model.setRowCount(0);
		
		//테이블에 Vector로 저장된 값들 dto 객체를 이용해 일제히 출력
		//Vector<HelloDTO>를 담고 있던 Vetor값 일제 출력
		//출력할땐 클래스가 아니라 String으로 바꾸어줘야하기 때문
		for (HelloDTO dto : list) {
			
			Vector<String> data = new Vector<String>();
			
			//Vector에 데이터주기
			data.add(dto.getNum());
			data.add(dto.getName());
			data.add(dto.getAddr());
			//!!!!!!!!!!!!!!!!!!!!!!!!
			//Vector가 String 형으로 선언되었기에 int나 data 형을 바꾸려면 String value of 사용 
			data.add(String.valueOf(dto.getSdate()));
			
			//model에 넣어주기
			model.addRow(data);
		}
		
	}
		
	
	/////////////////////////////////////////////
	//삭제 버튼 메서드
	@Override
	public void actionPerformed(ActionEvent e) {
		
		//단일 버튼일 경우, Object 안만들어도 된다!!!!!
		
		
		//선택한 행 번호를 받고 그걸 통해 값을 얻는다!!
		//!!!!!!!!!!!!
		int row = table.getSelectedRow();
		Object value = table.getValueAt(row, 0);
		
		//얻은 값을 num값으로 변환!!!
		int num = Integer.parseInt((String) value);
		System.out.println(num);
				
		
		//row값 전달
		//모델 객체 생성
		HelloModel helloModel = new HelloModel();
		helloModel.deleteHello(num);
		
		list = helloModel.getAllData();
		
		showTable();
	}
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		new HelloDeleteForm();

	}

}

 

댓글