<br />의 초기 단계에서 <br />의 초기 단계에서 , 우선, 당신은 일반적인 아이디어, 달성 할 기능, 전체 모듈의 어떤 측면을 이해하고, 단점을 발견하기 위해 분명히 어떤 기능을 달성 해야하는지 명확하게해야합니다. 수행 과정. 대부분의 기술적 진보는 실제로 실천해야합니다.
기능 : 사용자 등록 기능+시스템 로그인 기능+검증 코드 생성
지식 : 창 디자인, 데이터베이스 디자인, Javabean 패키징 속성, 데이터베이스 연결의 JDBC 구현, 검증 코드 (색상 검증 코드 포함) 생성 기술 및 정규 표현식 검증 사용자 등록 정보 사용, 문자 문자열을 무작위로 얻으려면 문자열을 얻습니다. 텍스트 등의 문자 수 제어 등
디자인 모듈 미리보기 맵 :
색상 검증 코드 미리보기 :
사용 된 데이터베이스 : MySQL
데이터베이스 디자인
사용자의 등록 데이터를 저장하기위한 테이블 TB_USER가 포함 된 데이터베이스 DB_DATABASE01을 만듭니다.
4 개의 필드가 포함되어 있습니다
id int (11)
사용자 이름 Varchar (15)
비밀번호 varchar (20)
이메일 Varchar (45)
MySQL 문은 다음과 같이 설계 될 수 있습니다.
스키마 DB_DATABASE01을 만듭니다. 1, "lixiyu", "lixiyu", [email protected]);
lixiyu를 사용자 이름으로 사용하십시오.
생성 된 양식을 확인하려면 문을 선택하십시오.
Javabean 포장 사용자 속성을 작성하십시오
com.lixiyu.model; public void setId (int id) {this.id = id;} public String getUeSerneName () {return username;} public void setUserName (string username) {thi s.username = username;} public string getpassword () {return password; } public void setpassword (문자열 암호) {this.password = password;} public String getEmail () {return email;} public void seiteMail (strin g email) {this.email = 이메일;}}
JDBC 도구 클래스를 작성하십시오
DBCONFIG 인터페이스 및 DBHELPER 클래스에 데이터베이스 작업과 관련된 코드를 배치하십시오.
DBCONFIG 인터페이스는 데이터베이스, 사용자 이름 및 비밀번호 정보 코드를 저장하는 데 사용됩니다.
com.lixiyu.util;
JDBC의 개발을 단순화하기 위해 DBHELPER는 Commons Dbutil 조합을 사용했습니다.
DBHELPER 클래스는 DBCONFIG 인터페이스를 상속합니다.
(1) getConnection () 메소드 : 데이터베이스 연결을 얻고 MySQL 데이터 소스를 사용하여 데이터베이스 드라이버로드로 인한 이상을 피하기 위해 프로그래밍을 단순화합니다.
(2) 존재 () 메소드 : 입력 사용자 이름이 존재하는지 여부를 결정하십시오.
(3) check () 메소드 : 사용자가 사용자 이름과 비밀번호를 입력하면 check () 메소드가 올바른지 확인하십시오.
(4) 저장 () 메소드 : 사용자가 법적 등록 정보를 입력 한 후 정보를 저장하십시오.
자세한 코드 :
com.lixiyu.util; Commons.queryrunner org.apache.commons.resultandler; import com.mysql.jdbc.jdbc2.optional.msqldatarce { / * * 데이터베이스 연결 개체를 얻으십시오. getConnection () {mysqldatasource mds = mysql data source mds.setdatabaseName (databaseName); 비밀번호); * * 사용자 이름을 지정하는 사용자가 NER = QueryRunner 객체 SQL을 작성하십시오. / 쿼리 정의 Connnnection (); rsh);) {// 목록에 true reture rebood} else {// list에 거짓말이없는 경우 {sqlexception e) {e .printstacktrace ();} {dbutils.cloSequietly (conn)} 허위가 발생하면 허위가 올바르게 반환됩니다. Commons Lang 구성 요소를 사용하여 SQL 주입을 피하십시오 * @return : true로 돌아 가기, 오류가 false */ public static boolean check (string username, char [] password) {username = stringscapeutils.escapesql (username); QueryRunner runner에 대한 입력 = 새 QueryRunner (); / / QueryRunner 객체 string sql = "wherername = ' + username +"; "; plot resultSandler <botal> rsh = new scalalandler (); result.tocharray (); // 암호는 if (arrerays.equals (password, querypassword))로 변환됩니다. // QueryPassWork D, '0'); ); // 쿼리 비밀번호를 지우십시오.}} catch (sqlexception e) {e.printstacktrace (); 사용자가 입력 한 등록 된 정보 * * @return : 저장이 True로 성공적으로 반환되면 보존 실패는 False * / public static boolean save (user user) {QueryRunner runner = new QuestionRunner ()를 반환합니다 Object String sql = "tb_user (사용자 이름, 암호, 이메일) 값 (?,?,?); .getPassword (), user.getEmail ()}; ///////저장이 성공적으로 true return true로 반환되는 경우} else {// 보존이 실패하면 false return false;}} catch (sqlexception e) {e.printstacktrace ();} 마지막 {} false return false;} catch를 반환합니다. equietly (conn);
시스템 로그인
1.1 창 디자인
BoxLayout 레이아웃을 사용하여 컨트롤 배열 방법을 위에서 아래로 설정하십시오.
다음과 같이 코드 코드를 복사합니다. contentpane.setLayout (New BoxLayout (ContentPane, BoxLayout.page_axis));
창은 컨트롤, 텍스트 도메인, 암호 도메인, 버튼 및 기타 컨트롤을 사용하여 코드를 구현합니다.
공개 로그인은 개인 정적 최종 SerialversionUID를 확장합니다 ( ""com.sun.java.swing.plaf.nimbus.nimbuslookandfeel ");} catch (Throwable e) {eventqueue.invokeler (new r) unnable () {public void run () {try {login frame = new login ; usernamepanel = contentpane.add (usernamepanel); usernamepanel.add (usernamelable); new jtextfield (usernametextfield. (); Add. jpasswordfield (); Passwordfield.setColumns (10); New Font ( "Microsoft Yahei", 15); Assictpanel.Add (anl (); valuepanel (valuepanel); = New Jlabel ( "/u9a8c/u8bc1/uff1a"); new font ( "Microsoft Yahei", font.plain, 15); ValidAtetextField.SetFont (New Font ( "Microsoft Yahei", Font.Plain, 15); ValidatePanel.Add (ValidAtetextField); ValidAtetextField.SetColumns (5); RandomTtTomtt Ext = RandomStringUtils.randomalphanumeric (4); CaptChalabel (CaptChalabel) ) // 랜덤 검증 코드. ); admplsbutton.addactionListener (new ActionListener () {@OverRidePublic void void (actionPerformed ctionevent e) {do_submitbutton_actionperformed (e);}}); CANCELBUTTON = 새로운 JBUTTON ( "EXIT"); .add (cancelButton);
창에 표시 :
공개 클래스 SwingUtil {/** 컨테이너의 크기에 따라 왼쪽 코너 좌표가 계산됩니다. )/ 2;/ 2; 왼쪽 코너 좌표}}
1.2 검증 코드 획득 및 그리기
공개 클래스 Captchalabel은 Jlabel을 확장합니다. 레이블} @overridepublic void Paint (그래픽 g) {g); G.DrawString (텍스트, 5, 25);
*색상 검증 코드 :
공개 클래스 ColorgefulcaptChalabel은 Jlabel을 확장합니다. .gray, color.green, color.light_gray, color.magenta, color.orange, color.pink.red, color.yllow}; .Text = 텍스트; New Dimension (60, 36); .SetFont (New Font ( "Microsoft Yahei", font.plain, 16); [color randomutils.nextint (colors.length)); "" + text.chaarat (i), 5 + i * 13, 25);
1.3 비어 있지 않은 학교
if (username.isempty ()) {// 사용자 이름이 emptypanepane.showmessagedialog인지 결정하십시오 ( "사용자 이름이 비어있을 수 없습니다!", "경고 정보", jobpane.warning_message); (password) .isempty ()) {// 비밀번호가 비어있는 jobPane.showMessageDialog인지 결정 (이것은 "비밀번호가 비어있을 수 없습니다!", "warmentpane.warning_message); return;} if (유효한 ate.isempty ()). {// 검증 코드가 empalypanepane.showmessagedialog인지 결정하십시오 (이것은 "검증 코드가 비어있을 수 없습니다!", "경고 정보", jobpane.warning_message;};
1.4 합법성 검증
if (! dbhelper.exists (username)) {// 사용자 이름이 존재하지 않으면 jobPane.showMessagedIalog ( "사용자 이름이 존재하지 않습니다!", "warmentpane.warning_message); return;} if (if). dbhelper.check (username, password)) {// 비밀번호가 오류가되면 (! validate.equals (randomtext) {// 일치하지 않으면 메시지가 표시됩니다. jobpane.showmessagedialog ( "검증 코드 오류!", "경고 정보", jobparning_message);
1.5 기본 창을 표시합니다
eventqueue.invokelateer (new runnable () {@overridepublic void run () {mainframe frame = new mainframe (); // 기본 창 프레임 생성 .set -visible (true); //} catch (예외 E를 설정하십시오. ) {e.printstacktrace ();}});
기본 창을 설계하십시오 (비교적 간단) :
public mainframe () {setDefaultCloseOperation (jframe.exit_on_close); ContentPane .setLayout (New BorderLayout (0, 0)); el .setfont (new font ( "Microsoft Yahei", font.plain, 40); // 태그 fonts contentpane.add 세트 (tiplabel, borderlayout.center); // 응용 프로그램 setLocation (swingutil.centrecontainer (getsi ze ()) ););
사용자 등록
1.1 창 디자인
공개 클래스는 JFRAME를 확장합니다. 프롬프트 정보 표시/*** 응용 프로그램을 시작합니다.*/public static void main (String [] art) {try {uimanager.setlookandfeel ( "com.sun.java.plaf.nimbus.ni.ni mbuslookandfeel");} catch "); (Throwable e) {e.printstacktrace ();} eventqueue.invokelo (new runnable () {@overridepublic void run () {try {register frame = newer (); f rame.setvisible (true);} catch ) {e.printstacktrace ();}}});}/*** New JPanel (); /u540d/uff1a "); uernamelabel.setfont to 4/U7684 /u7b57/u7b26/u7b26/u4e32 "); AbstractDocument doc = (AbstractDocument) usernametextfield.getDocument (); doc.setDocumentFilter (15); // 텍스트 도메인의 문자 길이를 15doc.adddocumentlist에 제한 (새로운 FONT "); passwordLabel1.setfont toset ("microsoft yahei ", font.plain, 15)); passwordfanel1.add (passwordfield1 = newwordfield (passwordfield1 = newwordfield (); AbstrctDocument) passwordfield1.getDocument (); doc.setDocumentFilter (new DocumentSizeFilter 20); / anddddocumentListener (새로운 documeentsizelisizer, 20); .SetColumns (10); 15)); Asformation은 AbstrctDocument (AbstrctDocument); documeentsizelisizer, 20); ADD (emailpanel); Jl Abel Emaillabel = "/u7535/u5b50/uff1a"; emaillabel.setfont to; 이메일 텍스트 필드 = 새로운 jtextfield (); ADDDOCUMENTLISTERE (New DocumentSizelistener, 45) (Microsoft Yahei "); TTON Submitton = "/u63d0/u4ea4"; font. 15) = 새로운 JBUTTON ( "/u53d6/u6d88"); yahei ", font.plain, 15); buttonpanel.add (cancelbutton); pack (); // 창 setlocation 크기를 자동으로 조정 (swingutil.centrecontrecontrecontrecontrecontr ainer (getsize ()); 창의 가운데}
1.2 DocumentFilter를 사용하여 텍스트에서 사용 가능한 문자 수를 제한하십시오.
Public ClassICESIDEFILTER {private int maxsize; // 텍스트의 최대 길이를 가져옵니다. , int Office, String String, AttributeSet attr) badlocationException 던지기 {if (fb.getDocume (). getLength () + String.length ()) <= maxSize) 큰 -length super.insertstring (fb, 오프셋, String, attr) // 부모 클래스의 메소드} else {getDefaultToolKit (); badlocationException {if (fb.getDocument (). getLength () + text.length () <= maxsize) {// super.replace (fb, 오프셋, 길이, 텍스트, atts); Class} else {툴킷 .getDefaultToolKit ();
1.3 DocumentListener 인터페이스를 사용하여 디스플레이 텍스트 컨트롤을 구현하십시오.
공공 클래스 문서화 된 intocmentsizeizer {private jlabel tiplabel; @ ouverridepublic void removenate (documentevent e) {settiptext (e);}@osuepublic voidupdate (d 문서 개체 tiplabel.setforeground (color.black); // (doc.getLength ()> (maxSize * 4/5)) {// 입력 문자의 길이가 최대 길이가 80보다 큰 경우. %tiplabel. setforeground (color.red); () + "/" + maxsize);}}
1.4 비어 있지 않은 학교
if (username.isempty ()) {// 사용자 이름이 emptypanepane.showmessagedialog인지 결정하십시오 ( "사용자 이름이 비어있을 수 없습니다!", "경고 정보", jobpane.warning_message); (password1) .isempty ()) {// 비밀번호가 비어있는 신문 여부를 결정합니다. ()) {// 확인 암호가 empalypanepane.showmessagegedialog인지 판단하는 (이것은 "비밀번호가 비어있을 수 없다!", "경고판.warning_message); pty ()) {// 이메일이 empalypanepane.showmessagedialog인지 결정 (이것은 "이메일이 비어있을 수 없습니다!", "경고 정보", jobpane.warning_message;};
1.5 정규 표현식 검증 문자열 사용 (정당성 검증)
// 사용자 이름이 합법적 인 경우 (! pattern.matches ( "// w {5,15}", username) {jobPane.showMessagedIalog ( "법적 사용자 이름을 입력하십시오!", "경고 정보" , jobpane.warning_message);} // 입력 한 비밀번호가 동일하지만 (! arrays.equals (password1, password2)) {jobpane.showmessagedialog 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것, 이것,이 "다른 암호 입력! "," "," "" ""경고 정보 ", jobPane.warning_message); return;} // 이메일 주소가 합법적인지 확인 if (! pattern.matches ("// w+@/w+/w+", 이메일) { jobpine.showmessagedialo g (이것은 "법적 이메일을 입력하십시오!", "경고 정보", jobpane.warning_message);} // (dbhelper.exists (username)) {jobpane.showmessagedia 로그 (이것은 이미 존재했다”, "경고 정보", jobpane.warning_message;};
1.6 등록 정보를 저장하십시오
user = user.setusername (username); if (dbhelper.save (user)) {jobpane.showmessagedialog (이 "사용자 등록!"ane .information_message;} else {jobpane.showmessagedialog ( "사용자 등록 실패!" ;}}}
이 시점에서 간단하고 완전한 로그인 등록 모듈이 완료됩니다.
위는이 기사의 모든 내용입니다.