티스토리 뷰
반응형
AWT, 로그인 예제, Adapter클래스 이용
8/20일 예제 인용
/*
* 창닫기 기능 구현 : WindowAdapter(추상클래스) -> 구현
* windowClosing(추상메소드)
* 장점 : WindowListener를 이용할 경우는 실제로 필요하지 않은 메소드도 강제적으로 구현해야 하지만
* 추상클래스(WindowAdapter)의 경우는 실제로 필요한 메소드만을 구현하면 되므로 경제적
*/
import java.awt.*; import java.awt.event.*; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import com.kysoft.member.Member; import com.kysoft.member.MemberDAO; class JavaEx29 extends Frame { // Frame = 기본 Container private static final long serialVersionUID = 1L; // Components Label lid; // ID 레이블 Label lpwd; // PW 레이블 TextField tfId; // ID 필드 TextField tfPwd; // PW 필드 Button ok; // 로그인 버튼 Dialog msgDlg; // 팝업창 Label msgLabel; // 초기화(Initialization) // components 인스턴스(객체) 생성 / 속성 할당 / container에 장착 JavaEx29(String title) { super(title); // Frame(String title)을 호출한다. // Components 생성 lid = new Label("ID :", Label.RIGHT); // Label의 text정렬을 오른쪽으로. lpwd = new Label("Password :", Label.RIGHT); // 약 12개의 글자를 입력할 수 있는 TextField 생성. tfId = new TextField(12); tfPwd = new TextField(12); tfPwd.setEchoChar('*'); // 입력한 값 대신 '*'이 보이게 한다. tfId.setBackground(Color.yellow); // 배경색 지정 tfPwd.setBackground(Color.yellow); // 배경색 지정 ok = new Button("로그인"); // ok = new Button("OK"); msgDlg = new Dialog(this,"로그인 메시지",false); msgDlg.setSize(500,70); msgDlg.setLocation(50,50); msgDlg.setLayout(new FlowLayout()); msgDlg.setVisible(false); msgLabel = new Label(""); msgDlg.add(msgLabel); Button btnOk = new Button("OK"); msgDlg.add(btnOk); btnOk.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ msgDlg.setVisible(false); msgDlg.dispose(); tfId.setText(""); tfPwd.setText(""); tfId.requestFocus(); } }); // OK버튼과 TextField에 이벤트처리를 위한 Listener를 추가해준다. tfId.addActionListener(new EventHandler()); // ID field tfPwd.addActionListener(new EventHandler()); // PW field ok.addActionListener(new EventHandler()); // 로그인 버튼 //super.addWindowListener(new EventHandler()); // //super.addWindowListener(new EventHandler()); // /* * 창닫기 기능 구현 : WindowAdapter(추상클래스) -> 구현 * windowClosing(추상메소드) * 장점 : WindowListener를 이용할 경우는 실제로 필요하지 않은 메소드도 강제적으로 구현해야 하지만 * 추상클래스(WindowAdapter)의 경우는 실제로 필요한 메소드만을 구현하면 되므로 경제적 */ addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub e.getWindow().setVisible(false); // 창(윈도우 : Frme)을 닫다; 메모리상에서는 여전히 e.getWindow().dispose(); // 메모리에서 제거 System.exit(0); // 프로그램 정상 종료 } });// //리스터(Listener Interface) -> 어댑터 클래스(Adapter class) //component들을 container에 장착(add) // 레이아웃(배치) 방식을 설정 setLayout(new FlowLayout()); // LayoutManager를 FlowLayout으로 add(lid); // ID Label // 생성한 Component들을 Frame에 포함시킨다. add(tfId); // ID field add(lpwd); // PW Label add(tfPwd); // PW field add(ok); // 로그인 버튼 setSize(450, 70); // 크기설정 setVisible(true); // Frame이 화면에 보이게 한다. } private boolean checkId(String id) throws PatternSyntaxException { boolean flag = false; // 로그인 폼 점검(form validation) 시작 /* * regex : ID : 1) 공백없음. 2) 8~12자 3) 특수문자(X) * 4) 첫자는 반드시 영문자 소문자로 시작 */ String pattern = "[a-z][a-z | A-Z | 0-9\\S]{7,11}"; Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(id); if (m.matches()) { flag=true; } else { //flag=false; msgLabel.setText("아이디는 공백없이 영문자나 숫자로 구성되며 8~12자 사이입니다."); msgDlg.setVisible(true); } return flag; } public static void main(String args[]) { JavaEx29 f = new JavaEx29("Login"); } class EventHandler implements ActionListener { public void actionPerformed(ActionEvent e){ String id = tfId.getText(); // tfId에 입력되어있는 text를 얻어온다. String password = tfPwd.getText(); // DB P/G'n 시작 HashMap<String, String> map = new HashMap<String, String>(); MemberDAO dao = new MemberDAO(); ArrayList<Member> members = new ArrayList<Member>(); try { members = dao.getMembers(); } catch (SQLException se) { System.out.println("예외처리 5: "+se.getMessage()); se.printStackTrace(); } catch (Exception ex) { System.out.println("예외처리 6: "+ex.getMessage()); ex.printStackTrace(); } for (int i=0; i<members.size();i++) map.put(members.get(i).getId(), members.get(i).getPw()); if (checkId(id)) { // ID 유효성(validation) 점검 = OK ! if(!map.containsKey(id)) { msgLabel.setText("입력하신 id는 존재하지 않습니다. 다시 입력해주세요."); msgDlg.setVisible(true); //System.out.println("입력하신 id는 존재하지 않습니다. 다시 입력해주세요."); } else { if(!(map.get(id)).equals(password)) { msgLabel.setText("비밀번호가 일치하지 않습니다. 다시 입력해주세요."); msgDlg.setVisible(true); //System.out.println("비밀번호가 일치하지 않습니다. 다시 입력해주세요."); } else { msgLabel.setText("id와 비밀번호가 일치합니다."); msgDlg.setVisible(true); //System.out.println("id와 비밀번호가 일치합니다."); }//if }//if } // DB P/G'n 끝 } } }
반응형
'IT & programming > Java' 카테고리의 다른 글
8/23 - 채팅 소스, 서버 구축 (0) | 2012.08.23 |
---|---|
8/22 - I/O, 스트림, IOEx 예제문제 (0) | 2012.08.22 |
8/20 - AWT, 로그인 창 예제 (0) | 2012.08.20 |
8/20 - AWT, 이벤트 처리방법, 예제 Frametest3 (0) | 2012.08.20 |
8/20 - Event의 종류와 관련 인터페이스 (0) | 2012.08.20 |
댓글