#30

조성현·2023년 4월 12일
0

우편번호 생성기

틀 잡기

1. 데이터베이스 - ERD - SQL
	// 시, 도 목록
	select distinct sido from zipcode;
    // 서울시의 구, 군 목록
	select distinct gugun from zipcode where sido = '서울';
    // 서울시 중랑구의 동 목록
	select distinct dong from zipcode where sido = '서울' and gugun = '중랑구';
    // 서울시 중랑구 중화2동의 zipcode, ri, bunji 목록
	select zipcode, ri, bunji from zipcode where sido = '서울' and gugun = '중랑구' and dong = '중화2동';
    
2. UML
	Class Diagram - 클래스/메서드/필드

	ZipcodeSearchUI
		SidoComboBoxModel
		GugunComboBoxModel	=> ZipcodeTO => ZipcodeDAO		
		DongComboBoxModel	     	setxxx		ArrayList<ZipcodeTO>listSido()
			getSize()		     	getxxx	   	ArrayList<ZipcodeTO>listGugun(String strSido)
			getElementAt()			   			ArrayList<ZipcodeTO>listDong(String strSido, String strGugun)
							   					ArrayList<ZipcodeTO>listAddress(String strSido, String strGugun, String strDong)

	Sequence Diagram - 메서드 호출
	Use Case Diagram - 기능

프로젝트 생성

zipcodemodel


SidoComboBoxModel

public class SidoComboBoxModel extends DefaultComboBoxModel<String> {
	
	private ArrayList<ZipcodeTO> sidos;
	
	public SidoComboBoxModel() {
		// TODO Auto-generated constructor stub
		/*
		sidos = new ArrayList<>();

		ZipcodeTO to = new ZipcodeTO();
		to.setSido("시도");
		
		sidos.add(to);
		*/
		
		ZipcodeDAO dao = new ZipcodeDAO();
		sidos = dao.listSido();
	}
	
	@Override
	public int getSize() {
		// TODO Auto-generated method stub
		return sidos.size();
	}
	
	@Override
	public String getElementAt(int index) {
		// TODO Auto-generated method stub
		ZipcodeTO to = sidos.get(index);
		return to.getSido();
	}
}

GugunComboBoxModel

public class GugunComboBoxModel extends DefaultComboBoxModel<String> {
	
	private ArrayList<ZipcodeTO> guguns;
	
	public GugunComboBoxModel() {
		// TODO Auto-generated constructor stub
		
		guguns = new ArrayList<>();
		
		ZipcodeTO to = new ZipcodeTO();
		to.setGugun("구군");
		
		guguns.add(to);
		
	}
	
	public GugunComboBoxModel(String strSido) {
		ZipcodeDAO dao = new ZipcodeDAO();
		guguns = dao.listGugun(strSido);
	}
	
	@Override
	public int getSize() {
		// TODO Auto-generated method stub
		return guguns.size();
	}
	
	@Override
	public String getElementAt(int index) {
		// TODO Auto-generated method stub
		ZipcodeTO to = guguns.get(index);
		return to.getGugun();
	}
}

DongComboBoxModel

public class DongComboBoxModel extends DefaultComboBoxModel<String> {
	
	private ArrayList<ZipcodeTO> dongs;
	
	public DongComboBoxModel() {
		// TODO Auto-generated constructor stub
		dongs = new ArrayList<>();
		
		ZipcodeTO to = new ZipcodeTO();
		to.setDong("동");
		
		dongs.add(to);
	}
	
	public DongComboBoxModel(String strSido, String strGugun) {
		ZipcodeDAO dao = new ZipcodeDAO();
		dongs = dao.listDong(strSido, strGugun);
	}
	
	@Override
	public int getSize() {
		// TODO Auto-generated method stub
		return dongs.size();
	}
	
	@Override
	public String getElementAt(int index) {
		// TODO Auto-generated method stub
		ZipcodeTO to = dongs.get(index);
		return to.getDong();
	}
}

model

TO

public class ZipcodeTO {
	private String zipcode;
	private String sido;
	private String gugun;
	private String dong;
	private String ri;
	private String bunji;
    getxxx ...
    setxxx ...
    }

DAO

public class ZipcodeDAO {
	private Connection conn;
	
	// 데이터베이스 연결
	public ZipcodeDAO() {
		// TODO Auto-generated constructor stub
		String url = "jdbc:mariadb://localhost:3306/project";
		String user = "project";
		String password = "1234";
		
		try {
			Class.forName("org.mariadb.jdbc.Driver");
			this.conn = DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		}
	}
	
	public ArrayList<ZipcodeTO>listSido() {
		
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		ArrayList<ZipcodeTO> sidos = new ArrayList<>();
		try {
			String sql = "select distinct sido from zipcode";
			pstmt = this.conn.prepareStatement(sql);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				ZipcodeTO to = new ZipcodeTO();
				to.setSido(rs.getString("sido"));
				sidos.add(to);
			}
		} catch(SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} finally {
			if (conn != null) try {conn.close();} catch (SQLException e) {}
			if (pstmt != null) try {pstmt.close();} catch (SQLException e) {}
			if (rs != null) try {rs.close();} catch(SQLException e) {}
		}
		return sidos;
	}
	
	public ArrayList<ZipcodeTO>listGugun(String strSido) {
		
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		ArrayList<ZipcodeTO> guguns = new ArrayList<>();
		try {
			String sql = "select distinct gugun from zipcode where sido = ?";
			pstmt = this.conn.prepareStatement(sql);
			pstmt.setString(1, strSido);
			
			rs = pstmt.executeQuery();
			while(rs.next()) {
				ZipcodeTO to = new ZipcodeTO();
				to.setGugun(rs.getString("gugun"));
				guguns.add(to);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} finally {
			if (conn != null) try {conn.close();} catch (SQLException e) {}
			if (pstmt != null) try {pstmt.close();} catch (SQLException e) {}
			if (rs != null) try {rs.close();} catch(SQLException e) {}
		}
		return guguns;
	}
	
	public ArrayList<ZipcodeTO>listDong(String strSido, String strGugun) {
		
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		ArrayList<ZipcodeTO> dongs = new ArrayList<>();
		
		try {
			String sql = "select distinct dong from zipcode where sido = ? and gugun = ?";
			pstmt = this.conn.prepareStatement(sql);
			pstmt.setString(1, strSido);
			pstmt.setString(2, strGugun);
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				ZipcodeTO to = new ZipcodeTO();
				to.setDong(rs.getString("dong"));
				dongs.add(to);
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("[에러] : " + e.getMessage());
		} finally {
			if (conn != null) try {conn.close();} catch (SQLException e) {}
			if (pstmt != null) try {pstmt.close();} catch (SQLException e) {}
			if (rs != null) try {rs.close();} catch(SQLException e) {}
		}
		return dongs;
	}
	
	public ArrayList<ZipcodeTO>listAddress(String strSido, String strGugun, String strDong) {
		PreparedStatement pstmt = null;
		ResultSet rs = null;
				
		ArrayList<ZipcodeTO> address = new ArrayList<>();
				
		try {
			String sql = "select zipcode, ri, bunji from zipcode where sido = ? and gugun = ? and dong = ?";
			pstmt = this.conn.prepareStatement(sql);
			pstmt.setString(1, strSido);
			pstmt.setString(2, strGugun);
			pstmt.setString(3, strDong);
			rs = pstmt.executeQuery();
					
			while(rs.next()) {
				ZipcodeTO to = new ZipcodeTO();
				to.setZipcode(rs.getString("zipcode"));
				to.setRi(rs.getString("ri"));
				to.setBunji(rs.getString("bunji"));
				address.add(to);
					}
			} catch (SQLException e) {
					// TODO Auto-generated catch block
					System.out.println("[에러] : " + e.getMessage());
			} finally {
					if (conn != null) try {conn.close();} catch (SQLException e) {}
					if (pstmt != null) try {pstmt.close();} catch (SQLException e) {}
					if (rs != null) try {rs.close();} catch(SQLException e) {}
			}
			return address;
	}
	
}

ZIpcodeSearchUI01

combo1 = new JComboBox();
		//combo1.setModel(new DefaultComboBoxModel(new String[] {"시도"}));
		combo1.setModel(new DefaultComboBoxModel(new String[] {"시도", "서울", "인천", "경기"}));
		combo1.setSelectedIndex(0);
		combo1.addItemListener( new ItemListener() {
			public void itemStateChanged( ItemEvent e ) {
				if( e.getStateChange() == ItemEvent.SELECTED ) {
					//System.out.println(combo1.getSelectedIndex());
					if(combo2 != null) {
						combo2.setModel(new GugunComboBoxModel((String)combo1.getSelectedItem()));
						combo2.setSelectedIndex(0);
					}
				}
			}
		} );
		combo1.setBounds( 21, 20, 160, 21 );
		panel.add( combo1 );
          
		combo2 = new JComboBox();
		//combo2.setModel(new DefaultComboBoxModel(new String[] {"구군"}));
		combo2.setModel(new GugunComboBoxModel());
		combo2.setSelectedIndex(0);
		combo2.addItemListener( new ItemListener() {
			public void itemStateChanged( ItemEvent e ) {
				if( e.getStateChange() == ItemEvent.SELECTED ) {
					if(combo3 != null) {
						//combo3.setModel(new DongComboBoxModel((String)combo2.getSelectedItem(), 5));
						combo3.setModel(new DongComboBoxModel((String)combo1.getSelectedItem(), (String)combo2.getSelectedItem()));
						combo3.setSelectedIndex(0);
					}
				}
			}
		} );
		combo2.setBounds( 202, 20, 160, 21 );
		panel.add( combo2 );
          
		combo3 = new JComboBox();
		//combo3.setModel(new DefaultComboBoxModel(new String[] {"동"}));
		combo3.setModel(new DongComboBoxModel());
		combo3.setSelectedIndex(0);
		combo3.addItemListener( new ItemListener() {
			public void itemStateChanged( ItemEvent e ) {
				if( e.getStateChange() == ItemEvent.SELECTED ) {
					textArea.setText("");
					
					String sido = (String)combo1.getSelectedItem();
					String gugun = (String)combo2.getSelectedItem();
					String dong = (String)combo3.getSelectedItem();
				
					ZipcodeDAO dao = new ZipcodeDAO();
					ArrayList<ZipcodeTO> addresses = dao.listAddress(sido, gugun, dong);
					for (ZipcodeTO to : addresses) {
						String address = String.format("[%s], %s, %s, %s, %s, %s,", to.getZipcode(),
								sido, gugun, dong, to.getRi(), to.getBunji());
						textArea.append(address + System.lineSeparator());
					}
					
				}
			}
		} );
		combo3.setBounds( 383, 20, 160, 21 );
		panel.add( combo3 );

Layout - 컨포넌트 배치

클래스종류

NullLayout(Absolute Layout) - 좌표배치

BorderLayout - 한 화면을 5개로 분할해서 배치(동서남북중앙)
: 화면 윤곽을 잡을 때 사용
FlowLayout - 행 또는 열로 배치
: 디폴트가 중앙에 배치

GridLayout - 모눈에 배치

CardLayout - 한 장씩 덮어쓰면서(over write) 배치

데이터 불러오기

getLayout()
setLayout()

컨테이너 - 기본 레이아웃

JFrame - Border Layout
JPanel - Flow Layout

Event

JButton btn1 = new JButton("New button");
		// 1. 이벤트를 연결하는 메서드
		// 2. 이벤트가 발생하면 처리되는 이벤트 클래스
		// interface / adapter class
		// 3. 이벤트가 발생하면 처리 할 이벤트 핸들러
		btn1.addMouseListener(new MouseListener() {
			
			// 이벤트 핸들러
			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
				System.out.println("mouseClicked");
			}

			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub
				System.out.println("mousePressed");
			}

			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub
				System.out.println("mouseReleased");
			}

			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				System.out.println("mouseEntered");
			}

			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				System.out.println("mouseExited");
			}
			
		});
		
		btn1.setBounds(12, 10, 97, 23);
		contentPane.add(btn1);

textField = new JTextField();
		// window builder
		textField.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				System.out.println(textField.getText());
			}
		});
		
		// 수동
		/*textField.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				System.out.println(textField.getText());
			}
		});*/
		textField.setBounds(12, 148, 262, 21);
		contentPane.add(textField);
		textField.setColumns(10);

JButton btn4 = new JButton("New button");
		btn4.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				System.out.println(textField.getText());
				// 클릭한 버튼의 좌표
				System.out.println(e.getX());
				System.out.println(e.getY());
                // 클릭한 횟수 (누적 된다.)
				System.out.println(e.getClickCount());
				
				//System.out.println(e.getSource());
				// 이벤트가 발생한 버튼을 가져와서 setText()로 바꿈
				JButton btn = (JButton)e.getSource();
				btn.setText("클릭 됨");
			}
		});
		btn4.setBounds(300, 147, 97, 23);
		contentPane.add(btn4);

Event 내부클래스로 생성

JButton btn1 = new JButton("1");
		btn1.setName("이름1");
		btn1.addMouseListener(new UserMouseEvent1());
		btn1.setBounds(12, 10, 97, 23);
		contentPane.add(btn1);
		
		JButton btn2 = new JButton("2");
		btn2.setName("이름2");
		btn2.addMouseListener(new UserMouseEvent1());
		btn2.setBounds(12, 53, 97, 23);
		contentPane.add(btn2);
		
		JButton btn3 = new JButton("3");
		btn3.setName("이름3");
		btn3.addMouseListener(new UserMouseEvent1());
		btn3.setBounds(12, 98, 97, 23);
		contentPane.add(btn3);
class UserMouseEvent1 implements MouseListener {

		@Override
		public void mouseClicked(MouseEvent e) {
			// TODO Auto-generated method stub
			System.out.println("mouseClicked");
		}

		@Override
		public void mousePressed(MouseEvent e) {
			// TODO Auto-generated method stub
			System.out.println("mousePressed");
		}

		@Override
		public void mouseReleased(MouseEvent e) {
			// TODO Auto-generated method stub
			System.out.println("mouseReleased");
		}

		@Override
		public void mouseEntered(MouseEvent e) {
			// TODO Auto-generated method stub
			System.out.println("mouseEntered");
		}

		@Override
		public void mouseExited(MouseEvent e) {
			// TODO Auto-generated method stub
			System.out.println("mouseExited");
		}
		
	}
class UserMouseEvent2 extends MouseAdapter {

		@Override
		public void mouseClicked(MouseEvent e) {
			// TODO Auto-generated method stub
			System.out.println("mouseClicked");
			System.out.println(((JButton)e.getSource()).getText());
			System.out.println(((JButton)e.getSource()).getName());
			
			String name = (((JButton)e.getSource()).getName());
			switch(name) {
			case "이름1" :
				System.out.println("btn1 mouseClicked");
				break;
			case "이름2" : 
				System.out.println("btn2 mouseClicked");
				break;
			case "이름3" :
				System.out.println("btn3 mouseClicked");
				break;
			default :
				System.out.println("에러");
			}
			
		}
		
	}

+getName() 디자인부분에서 설정하는법

Event를 이용한 주민번호 검사

0개의 댓글