전화번호부 관리 프로그램(HashTable사용)
- 프로젝트 생성 : File -> New -> Java Project
- Class 생성 : scr 폴더에서 마우스 오른쪽 버튼 클릭 -> New -> Class
- 생성된 클래스들
- PhoneDTO.java 수정
1234567891011121314package kr.ac.jj.ai_phone;public class PhoneDTO {int _id;String name = "";String hp = "";int group = 0;public void myprint() {System.out.printf("%d %s %s %d",this._id, this.name, this.hp, this.group);}} - PhoneUI.java 수정 : UI 생성
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package kr.ac.jj.ai_phone;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextField;public class PhoneUI extends JFrame{JTextField tfId;JTextField tfName;JTextField tfHp;JTextField tfGroup;public PhoneUI() {this.setSize(800, 600);this.setLayout(null);this.tfName = new JTextField();this.tfName.setBounds(10, 10, 100, 25);this.add(tfName);this.tfHp = new JTextField();this.tfHp.setBounds(10, 50, 100, 25);this.add(tfHp);this.tfGroup = new JTextField();this.tfGroup.setBounds(10, 90, 100, 25);this.add(tfGroup);JButton btnSave = new JButton("저장");btnSave.setBounds(10, 300, 100, 25);this.add(btnSave);JButton btnDelete = new JButton("삭제");btnDelete.setBounds(10, 350, 100, 25);this.add(btnDelete);JButton btnUpdate = new JButton("수정");btnUpdate.setBounds(10, 400, 100, 25);this.add(btnUpdate);this.setVisible(true);}public static void main(String[] args) {// TODO Auto-generated method stubnew PhoneUI();}} - PhoneUI.java 수정 : ActionListener 추가
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081package kr.ac.jj.ai_phone;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextField;public class PhoneUI extends JFrame implements ActionListener{JTextField tfId;JTextField tfName;JTextField tfHp;JTextField tfGroup;public PhoneUI() {this.setSize(800, 600);this.setLayout(null);this.tfName = new JTextField();this.tfName.setBounds(10, 10, 100, 25);this.add(tfName);this.tfHp = new JTextField();this.tfHp.setBounds(10, 50, 100, 25);this.add(tfHp);this.tfGroup = new JTextField();this.tfGroup.setBounds(10, 90, 100, 25);this.add(tfGroup);JButton btnSave = new JButton("저장");btnSave.setBounds(10, 300, 100, 25);this.add(btnSave);btnSave.addActionListener(this);JButton btnDelete = new JButton("삭제");btnDelete.setBounds(10, 350, 100, 25);this.add(btnDelete);btnDelete.addActionListener(this);JButton btnUpdate = new JButton("수정");btnUpdate.setBounds(10, 400, 100, 25);this.add(btnUpdate);btnUpdate.addActionListener(this);this.setVisible(true);}public static void main(String[] args) {// TODO Auto-generated method stubnew PhoneUI();}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubPhoneDTO dto;PhoneDAO dao;switch(e.getActionCommand()) {case "저장":dto = new PhoneDTO();//dto._id = Integer.parseInt( tfId.getText() );dto.name = tfName.getText();dto.hp = tfHp.getText();dto.group = Integer.parseInt( tfGroup.getText());dto.myprint();break;case "삭제":System.out.println("삭제 클릭");break;case "수정":System.out.println("수정 클릭");break;}}} - 삽입 기능 추가 : PhoneDAO 수정
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768package kr.ac.jj.ai_phone;import java.util.Enumeration;import java.util.Hashtable;public class PhoneDAO {Hashtable<Integer, PhoneDTO> hash;public PhoneDAO() {}public PhoneDAO(Hashtable<Integer, PhoneDTO> hash) {this.hash = hash;}public void insert(PhoneDTO dto) {int newid = 10001;Enumeration<Integer> enumer = hash.keys();while (enumer.hasMoreElements()) {int no = hash.get(enumer.nextElement())._id;if(no >= newid) {newid = no + 1;}}dto._id = newid;hash.put(newid, dto);}public void update(PhoneDTO dto) {PhoneDTO d = this.hash.get(dto._id);d.name = dto.name;d.hp = dto.hp;d.group = dto.group;//....}public void delete(int _id) {this.hash.remove(_id);}public PhoneDTO getOne(int _id) {return this.hash.get(_id);}public Object[] getTableHeader() {Object [] cols = {"_id", "이름", "전화번호", "그룹"};return cols;}public Object[][] getListVector(){Object[][] data = new Object[hash.size()][];Enumeration<Integer> enumer = hash.keys();int i=0;while (enumer.hasMoreElements()) {int key = enumer.nextElement();data[i] = new Object[4];data[i][0] = hash.get(key)._id + "";data[i][1] = hash.get(key).name;data[i][2] = hash.get(key).hp;data[i][3] = hash.get(key).group + "";i++;}return data;}} - 삽입 기능 추가 : PhoneUI 수정
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110package kr.ac.jj.ai_phone;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Hashtable;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.table.DefaultTableModel;public class PhoneUI extends JFrame implements ActionListener{Hashtable<Integer, PhoneDTO> hash;JTextField tfId;JTextField tfName;JTextField tfHp;JTextField tfGroup;DefaultTableModel model;JTable table;public PhoneUI() {hash = new Hashtable<Integer, PhoneDTO>();this.setSize(800, 600);this.setLayout(null);PhoneDAO dao9 = new PhoneDAO(this.hash);Object[][] vecs = dao9.getListVector();Object[] cols = dao9.getTableHeader();model = new DefaultTableModel(vecs, cols);table = new JTable(model);table.setBackground(Color.GREEN);JScrollPane scroll = new JScrollPane(table);scroll.setBounds(150, 10, 480, 540);this.add(scroll);this.tfName = new JTextField();this.tfName.setBounds(10, 10, 100, 25);this.add(tfName);this.tfHp = new JTextField();this.tfHp.setBounds(10, 50, 100, 25);this.add(tfHp);this.tfGroup = new JTextField();this.tfGroup.setBounds(10, 90, 100, 25);this.add(tfGroup);JButton btnSave = new JButton("저장");btnSave.setBounds(10, 300, 100, 25);this.add(btnSave);btnSave.addActionListener(this);JButton btnDelete = new JButton("삭제");btnDelete.setBounds(10, 350, 100, 25);this.add(btnDelete);btnDelete.addActionListener(this);JButton btnUpdate = new JButton("수정");btnUpdate.setBounds(10, 400, 100, 25);this.add(btnUpdate);btnUpdate.addActionListener(this);this.setVisible(true);}public static void main(String[] args) {// TODO Auto-generated method stubnew PhoneUI();}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubPhoneDTO dto;PhoneDAO dao;switch(e.getActionCommand()) {case "저장":dto = new PhoneDTO();//dto._id = Integer.parseInt( tfId.getText() );dto.name = tfName.getText();dto.hp = tfHp.getText();dto.group = Integer.parseInt( tfGroup.getText());dao = new PhoneDAO(this.hash);dao.insert(dto);model.setDataVector(dao.getListVector(),dao.getTableHeader());break;case "삭제":System.out.println("삭제 클릭");break;case "수정":System.out.println("수정 클릭");break;}}} - MouseListener 추가 : PhoneUI 수정
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161package kr.ac.jj.ai_phone;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.Hashtable;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.table.DefaultTableModel;public class PhoneUI extends JFrame implements ActionListener, MouseListener{Hashtable<Integer, PhoneDTO> hash;JTextField tfId;JTextField tfName;JTextField tfHp;JTextField tfGroup;DefaultTableModel model;JTable table;public PhoneUI() {hash = new Hashtable<Integer, PhoneDTO>();this.setSize(800, 600);this.setLayout(null);PhoneDAO dao9 = new PhoneDAO(this.hash);Object[][] vecs = dao9.getListVector();Object[] cols = dao9.getTableHeader();model = new DefaultTableModel(vecs, cols);table = new JTable(model);table.setBackground(Color.GREEN);JScrollPane scroll = new JScrollPane(table);scroll.setBounds(150, 10, 480, 540);this.add(scroll);this.table.addMouseListener(this);this.tfId = new JTextField();this.tfId.setBounds(10, 450, 100, 25);this.tfId.setEditable(false);this.add(tfId);this.tfName = new JTextField();this.tfName.setBounds(10, 10, 100, 25);this.add(tfName);this.tfHp = new JTextField();this.tfHp.setBounds(10, 50, 100, 25);this.add(tfHp);this.tfGroup = new JTextField();this.tfGroup.setBounds(10, 90, 100, 25);this.add(tfGroup);JButton btnSave = new JButton("저장");btnSave.setBounds(10, 300, 100, 25);this.add(btnSave);btnSave.addActionListener(this);JButton btnDelete = new JButton("삭제");btnDelete.setBounds(10, 350, 100, 25);this.add(btnDelete);btnDelete.addActionListener(this);JButton btnUpdate = new JButton("수정");btnUpdate.setBounds(10, 400, 100, 25);this.add(btnUpdate);btnUpdate.addActionListener(this);this.setVisible(true);}public static void main(String[] args) {// TODO Auto-generated method stubnew PhoneUI();}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubPhoneDTO dto;PhoneDAO dao;switch(e.getActionCommand()) {case "저장":dto = new PhoneDTO();//dto._id = Integer.parseInt( tfId.getText() );dto.name = tfName.getText();dto.hp = tfHp.getText();dto.group = Integer.parseInt( tfGroup.getText());dao = new PhoneDAO(this.hash);dao.insert(dto);model.setDataVector(dao.getListVector(),dao.getTableHeader());break;case "삭제":System.out.println("삭제 클릭");break;case "수정":System.out.println("수정 클릭");break;}}@Overridepublic void mouseClicked(MouseEvent arg0) {// TODO Auto-generated method stubint row = table.getSelectedRow();int id = Integer.parseInt(table.getValueAt(row, 0).toString());PhoneDAO dao = new PhoneDAO(hash);PhoneDTO dto = dao.getOne(id);// tfId를 추가해야 함tfId.setText(dto._id + "");tfName.setText(dto.name);tfHp.setText(dto.hp);tfGroup.setText(dto.group + "");}@Overridepublic void mouseEntered(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent arg0) {// TODO Auto-generated method stub}} - 삭제, 수정 기능 추가 : PhoneUI 수정
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189package kr.ac.jj.ai_phone;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.Hashtable;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.table.DefaultTableModel;public class PhoneUI extends JFrame implements ActionListener, MouseListener{Hashtable<Integer, PhoneDTO> hash;JTextField tfId;JTextField tfName;JTextField tfHp;JTextField tfGroup;DefaultTableModel model;JTable table;public PhoneUI() {hash = new Hashtable<Integer, PhoneDTO>();this.setSize(800, 600);this.setLayout(null);PhoneDAO dao9 = new PhoneDAO(this.hash);Object[][] vecs = dao9.getListVector();Object[] cols = dao9.getTableHeader();model = new DefaultTableModel(vecs, cols);table = new JTable(model);table.setBackground(Color.GREEN);JScrollPane scroll = new JScrollPane(table);scroll.setBounds(150, 10, 480, 540);this.add(scroll);this.table.addMouseListener(this);this.tfId = new JTextField();this.tfId.setBounds(10, 450, 100, 25);this.tfId.setEditable(false);this.add(tfId);this.tfName = new JTextField();this.tfName.setBounds(10, 10, 100, 25);this.add(tfName);this.tfHp = new JTextField();this.tfHp.setBounds(10, 50, 100, 25);this.add(tfHp);this.tfGroup = new JTextField();this.tfGroup.setBounds(10, 90, 100, 25);this.add(tfGroup);JButton btnSave = new JButton("저장");btnSave.setBounds(10, 300, 100, 25);this.add(btnSave);btnSave.addActionListener(this);JButton btnDelete = new JButton("삭제");btnDelete.setBounds(10, 350, 100, 25);this.add(btnDelete);btnDelete.addActionListener(this);JButton btnUpdate = new JButton("수정");btnUpdate.setBounds(10, 400, 100, 25);this.add(btnUpdate);btnUpdate.addActionListener(this);this.setVisible(true);}public static void main(String[] args) {// TODO Auto-generated method stubnew PhoneUI();}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubPhoneDTO dto;PhoneDAO dao;switch(e.getActionCommand()) {case "저장":dto = new PhoneDTO();//dto._id = Integer.parseInt( tfId.getText() );dto.name = tfName.getText();dto.hp = tfHp.getText();dto.group = Integer.parseInt( tfGroup.getText());dao = new PhoneDAO(this.hash);dao.insert(dto);model.setDataVector(dao.getListVector(),dao.getTableHeader());//매번 tfId는 초기화 되어 야 함this.tfId.setText("");break;case "삭제":if(this.tfId.getText().length() > 0) {dao = new PhoneDAO(this.hash);dao.delete(Integer.parseInt(this.tfId.getText()));model.setDataVector(dao.getListVector(),dao.getTableHeader());}//매번 tfId는 초기화 되어 야 함this.tfId.setText("");break;case "수정":if(this.tfId.getText().length() > 0) {dto = new PhoneDTO();dto._id = Integer.parseInt(this.tfId.getText());dto.name = this.tfName.getText();dto.hp = this.tfHp.getText();dto.group = Integer.parseInt(this.tfGroup.getText());dao = new PhoneDAO(this.hash);dao.update(dto);model.setDataVector(dao.getListVector(),dao.getTableHeader());//매번 tfId는 초기화 되어 야 함this.tfId.setText("");}break;}}@Overridepublic void mouseClicked(MouseEvent arg0) {// TODO Auto-generated method stubint row = table.getSelectedRow();int id = Integer.parseInt(table.getValueAt(row, 0).toString());PhoneDAO dao = new PhoneDAO(hash);PhoneDTO dto = dao.getOne(id);// tfId를 추가해야 함tfId.setText(dto._id + "");tfName.setText(dto.name);tfHp.setText(dto.hp);tfGroup.setText(dto.group + "");}@Overridepublic void mouseEntered(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent arg0) {// TODO Auto-generated method stub}} - 성별 라디오 버튼 추가 : DTO, DAO, UI 순으로 수정
- PhoneDTO 수정
12345678910111213141516package kr.ac.jj.ai_phone;public class PhoneDTO {int _id;String name = "";String hp = "";int group = 0;String gender = "M";public void myprint() {System.out.printf("%d %s %s %d %s",this._id, this.name, this.hp, this.group,this.gender);}} - PhoneDAO 수정
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970package kr.ac.jj.ai_phone;import java.util.Enumeration;import java.util.Hashtable;public class PhoneDAO {Hashtable<Integer, PhoneDTO> hash;public PhoneDAO() {}public PhoneDAO(Hashtable<Integer, PhoneDTO> hash) {this.hash = hash;}public void insert(PhoneDTO dto) {int newid = 10001;Enumeration<Integer> enumer = hash.keys();while (enumer.hasMoreElements()) {int no = hash.get(enumer.nextElement())._id;if(no >= newid) {newid = no + 1;}}dto._id = newid;hash.put(newid, dto);}public void update(PhoneDTO dto) {PhoneDTO d = this.hash.get(dto._id);d.name = dto.name;d.hp = dto.hp;d.group = dto.group;d.gender = dto.gender;//....}public void delete(int _id) {this.hash.remove(_id);}public PhoneDTO getOne(int _id) {return this.hash.get(_id);}public Object[] getTableHeader() {Object [] cols = {"_id", "이름", "전화번호", "그룹", "성별"};return cols;}public Object[][] getListVector(){Object[][] data = new Object[hash.size()][];Enumeration<Integer> enumer = hash.keys();int i=0;while (enumer.hasMoreElements()) {int key = enumer.nextElement();data[i] = new Object[5];data[i][0] = hash.get(key)._id + "";data[i][1] = hash.get(key).name;data[i][2] = hash.get(key).hp;data[i][3] = hash.get(key).group + "";data[i][4] = hash.get(key).gender;i++;}return data;}} - PhoneUI 수정
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223package kr.ac.jj.ai_phone;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.Hashtable;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.table.DefaultTableModel;public class PhoneUI extends JFrame implements ActionListener, MouseListener{Hashtable<Integer, PhoneDTO> hash;JTextField tfId;JTextField tfName;JTextField tfHp;JTextField tfGroup;DefaultTableModel model;JTable table;JRadioButton rdoMale;JRadioButton rdoFemale;String gender = "여자";public PhoneUI() {hash = new Hashtable<Integer, PhoneDTO>();this.setSize(800, 600);this.setLayout(null);PhoneDAO dao9 = new PhoneDAO(this.hash);Object[][] vecs = dao9.getListVector();Object[] cols = dao9.getTableHeader();model = new DefaultTableModel(vecs, cols);table = new JTable(model);table.setBackground(Color.GREEN);JScrollPane scroll = new JScrollPane(table);scroll.setBounds(150, 10, 480, 540);this.add(scroll);this.table.addMouseListener(this);this.tfId = new JTextField();this.tfId.setBounds(10, 450, 100, 25);this.tfId.setEditable(false);this.add(tfId);this.tfName = new JTextField();this.tfName.setBounds(10, 10, 100, 25);this.add(tfName);this.tfHp = new JTextField();this.tfHp.setBounds(10, 50, 100, 25);this.add(tfHp);this.tfGroup = new JTextField();this.tfGroup.setBounds(10, 90, 100, 25);this.add(tfGroup);// 성별rdoMale = new JRadioButton("남자", true);rdoMale.setBounds(10, 130, 60, 25);this.add(rdoMale);rdoMale.addActionListener(this);rdoFemale = new JRadioButton("여자", false);rdoFemale.setBounds(70, 130, 60, 25);this.add(rdoFemale);rdoFemale.addActionListener(this);ButtonGroup bgGender = new ButtonGroup();bgGender.add(rdoMale);bgGender.add(rdoFemale);rdoFemale.setSelected(true);JButton btnSave = new JButton("저장");btnSave.setBounds(10, 300, 100, 25);this.add(btnSave);btnSave.addActionListener(this);JButton btnDelete = new JButton("삭제");btnDelete.setBounds(10, 350, 100, 25);this.add(btnDelete);btnDelete.addActionListener(this);JButton btnUpdate = new JButton("수정");btnUpdate.setBounds(10, 400, 100, 25);this.add(btnUpdate);btnUpdate.addActionListener(this);this.setVisible(true);}public static void main(String[] args) {// TODO Auto-generated method stubnew PhoneUI();}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubPhoneDTO dto;PhoneDAO dao;switch(e.getActionCommand()) {case "남자":case "여자":this.gender = e.getActionCommand();break;case "저장":dto = new PhoneDTO();//dto._id = Integer.parseInt( tfId.getText() );dto.name = tfName.getText();dto.hp = tfHp.getText();dto.group = Integer.parseInt( tfGroup.getText());dto.gender = this.gender;dao = new PhoneDAO(this.hash);dao.insert(dto);model.setDataVector(dao.getListVector(),dao.getTableHeader());//매번 tfId는 초기화 되어 야 함this.tfId.setText("");break;case "삭제":if(this.tfId.getText().length() > 0) {dao = new PhoneDAO(this.hash);dao.delete(Integer.parseInt(this.tfId.getText()));model.setDataVector(dao.getListVector(),dao.getTableHeader());}//매번 tfId는 초기화 되어 야 함this.tfId.setText("");break;case "수정":if(this.tfId.getText().length() > 0) {dto = new PhoneDTO();dto._id = Integer.parseInt(this.tfId.getText());dto.name = this.tfName.getText();dto.hp = this.tfHp.getText();dto.group = Integer.parseInt(this.tfGroup.getText());dto.gender = this.gender;dao = new PhoneDAO(this.hash);dao.update(dto);model.setDataVector(dao.getListVector(),dao.getTableHeader());//매번 tfId는 초기화 되어 야 함this.tfId.setText("");}break;}}@Overridepublic void mouseClicked(MouseEvent arg0) {// TODO Auto-generated method stubint row = table.getSelectedRow();int id = Integer.parseInt(table.getValueAt(row, 0).toString());PhoneDAO dao = new PhoneDAO(hash);PhoneDTO dto = dao.getOne(id);// tfId를 추가해야 함tfId.setText(dto._id + "");tfName.setText(dto.name);tfHp.setText(dto.hp);tfGroup.setText(dto.group + "");if(dto.gender.compareTo("남자") == 0) {rdoMale.setSelected(true);}else {rdoFemale.setSelected(true);}}@Overridepublic void mouseEntered(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent arg0) {// TODO Auto-generated method stub}}
- PhoneDTO 수정
- 국가 콤보상자 추가 : DTO, DAO, UI 순으로 수정
- PhoneDTO 수정
12345678910111213141516package kr.ac.jj.ai_phone;public class PhoneDTO {int _id;String name = "";String hp = "";int group = 0;String gender = "M";String nation = "대한민국";public void myprint() {System.out.printf("%d %s %s %d %s %s",this._id, this.name, this.hp, this.group,this.gender, this.nation);}} - PhoneDAO 수정
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172package kr.ac.jj.ai_phone;import java.util.Enumeration;import java.util.Hashtable;public class PhoneDAO {Hashtable<Integer, PhoneDTO> hash;public PhoneDAO() {}public PhoneDAO(Hashtable<Integer, PhoneDTO> hash) {this.hash = hash;}public void insert(PhoneDTO dto) {int newid = 10001;Enumeration<Integer> enumer = hash.keys();while (enumer.hasMoreElements()) {int no = hash.get(enumer.nextElement())._id;if(no >= newid) {newid = no + 1;}}dto._id = newid;hash.put(newid, dto);}public void update(PhoneDTO dto) {PhoneDTO d = this.hash.get(dto._id);d.name = dto.name;d.hp = dto.hp;d.group = dto.group;d.gender = dto.gender;d.nation = dto.nation;//....}public void delete(int _id) {this.hash.remove(_id);}public PhoneDTO getOne(int _id) {return this.hash.get(_id);}public Object[] getTableHeader() {Object [] cols = {"_id", "이름", "전화번호", "그룹", "성별", "국가"};return cols;}public Object[][] getListVector(){Object[][] data = new Object[hash.size()][];Enumeration<Integer> enumer = hash.keys();int i=0;while (enumer.hasMoreElements()) {int key = enumer.nextElement();data[i] = new Object[6];data[i][0] = hash.get(key)._id + "";data[i][1] = hash.get(key).name;data[i][2] = hash.get(key).hp;data[i][3] = hash.get(key).group + "";data[i][4] = hash.get(key).gender;data[i][5] = hash.get(key).nation;i++;}return data;}} - PhoneUI 수정
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243package kr.ac.jj.ai_phone;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.Hashtable;import javax.swing.ButtonGroup;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JRadioButton;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.JTextField;import javax.swing.table.DefaultTableModel;public class PhoneUI extends JFrame implements ActionListener, MouseListener{Hashtable<Integer, PhoneDTO> hash;JTextField tfId;JTextField tfName;JTextField tfHp;JTextField tfGroup;DefaultTableModel model;JTable table;JRadioButton rdoMale;JRadioButton rdoFemale;String gender = "여자";String[] strNation= new String[] {"대한민국", "미국", "유럽", "중국", "일본", "기타"};JComboBox<String> cmbNation;public PhoneUI() {hash = new Hashtable<Integer, PhoneDTO>();this.setSize(800, 600);this.setLayout(null);PhoneDAO dao9 = new PhoneDAO(this.hash);Object[][] vecs = dao9.getListVector();Object[] cols = dao9.getTableHeader();model = new DefaultTableModel(vecs, cols);table = new JTable(model);table.setBackground(Color.GREEN);JScrollPane scroll = new JScrollPane(table);scroll.setBounds(150, 10, 480, 540);this.add(scroll);this.table.addMouseListener(this);this.tfId = new JTextField();this.tfId.setBounds(10, 450, 100, 25);this.tfId.setEditable(false);this.add(tfId);this.tfName = new JTextField();this.tfName.setBounds(10, 10, 100, 25);this.add(tfName);this.tfHp = new JTextField();this.tfHp.setBounds(10, 50, 100, 25);this.add(tfHp);this.tfGroup = new JTextField();this.tfGroup.setBounds(10, 90, 100, 25);this.add(tfGroup);// 성별rdoMale = new JRadioButton("남자", true);rdoMale.setBounds(10, 130, 60, 25);this.add(rdoMale);rdoMale.addActionListener(this);rdoFemale = new JRadioButton("여자", false);rdoFemale.setBounds(70, 130, 60, 25);this.add(rdoFemale);rdoFemale.addActionListener(this);ButtonGroup bgGender = new ButtonGroup();bgGender.add(rdoMale);bgGender.add(rdoFemale);rdoFemale.setSelected(true);cmbNation = new JComboBox<String>(this.strNation);cmbNation.setBounds(10, 170, 100, 25);this.add(cmbNation);JButton btnSave = new JButton("저장");btnSave.setBounds(10, 300, 100, 25);this.add(btnSave);btnSave.addActionListener(this);JButton btnDelete = new JButton("삭제");btnDelete.setBounds(10, 350, 100, 25);this.add(btnDelete);btnDelete.addActionListener(this);JButton btnUpdate = new JButton("수정");btnUpdate.setBounds(10, 400, 100, 25);this.add(btnUpdate);btnUpdate.addActionListener(this);this.setVisible(true);}public static void main(String[] args) {// TODO Auto-generated method stubnew PhoneUI();}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubPhoneDTO dto;PhoneDAO dao;switch(e.getActionCommand()) {case "남자":case "여자":this.gender = e.getActionCommand();break;case "저장":dto = new PhoneDTO();//dto._id = Integer.parseInt( tfId.getText() );dto.name = tfName.getText();dto.hp = tfHp.getText();dto.group = Integer.parseInt( tfGroup.getText());dto.gender = this.gender;dto.nation = cmbNation.getSelectedItem().toString();dao = new PhoneDAO(this.hash);dao.insert(dto);model.setDataVector(dao.getListVector(),dao.getTableHeader());//매번 tfId는 초기화 되어 야 함this.tfId.setText("");break;case "삭제":if(this.tfId.getText().length() > 0) {dao = new PhoneDAO(this.hash);dao.delete(Integer.parseInt(this.tfId.getText()));model.setDataVector(dao.getListVector(),dao.getTableHeader());}//매번 tfId는 초기화 되어 야 함this.tfId.setText("");break;case "수정":if(this.tfId.getText().length() > 0) {dto = new PhoneDTO();dto._id = Integer.parseInt(this.tfId.getText());dto.name = this.tfName.getText();dto.hp = this.tfHp.getText();dto.group = Integer.parseInt(this.tfGroup.getText());dto.gender = this.gender;dto.nation = cmbNation.getSelectedItem().toString();dao = new PhoneDAO(this.hash);dao.update(dto);model.setDataVector(dao.getListVector(),dao.getTableHeader());//매번 tfId는 초기화 되어 야 함this.tfId.setText("");}break;}}@Overridepublic void mouseClicked(MouseEvent arg0) {// TODO Auto-generated method stubint row = table.getSelectedRow();int id = Integer.parseInt(table.getValueAt(row, 0).toString());PhoneDAO dao = new PhoneDAO(hash);PhoneDTO dto = dao.getOne(id);// tfId를 추가해야 함tfId.setText(dto._id + "");tfName.setText(dto.name);tfHp.setText(dto.hp);tfGroup.setText(dto.group + "");if(dto.gender.compareTo("남자") == 0) {rdoMale.setSelected(true);}else {rdoFemale.setSelected(true);}int sel = 0;for(int i=0; i<strNation.length; i++) {if(dto.nation.compareTo(strNation[i]) == 0) {sel = i;break;}}cmbNation.setSelectedIndex(sel);}@Overridepublic void mouseEntered(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseExited(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mousePressed(MouseEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void mouseReleased(MouseEvent arg0) {// TODO Auto-generated method stub}}
- PhoneDTO 수정