로그인창의 메인 클래스
package ccnu.paint; import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Enumeration; import java.util.Properties; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import ccnu.util.Answer; import ccnu.util.Verification; public class Login extends JFrame { private static final long serialVersionUID = 1L; private Properties pro = new Properties(); private boolean ver_code = false; // 默认输入验证码错误 private Answer answer = null; private JPanel p1 = new JPanel(); // 添加到JPanel中的组件默认为流式布局 private JLabel luser = new JLabel("username: "); private JTextField username = new JTextField(20); private JPanel p2 = new JPanel(); private JLabel lpwd = new JLabel("password: "); private JPasswordField pwd = new JPasswordField(20); private JPanel p4 = new JPanel(); private JLabel lVer = new JLabel("verification: "); private JTextField ver = new JTextField(10); private JLabel img = new JLabel(); private JLabel result = new JLabel(); private JPanel p3 = new JPanel(); private JButton ok = new JButton("ok"); private JButton cancel = new JButton("cancel"); private JButton signUp = new JButton("Sign up"); // 用于账户注册 // 设置组件的监听 public void initListener() { username.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) {// JTextField的action是回车键 String name = username.getText(); // Login.this.setTitle(name); // System.out.println(name.hashCode() + "***" +"".hashCode()); if (name.equals("")) { JOptionPane.showMessageDialog(Login.this, "Please input a userName!"); } else { pwd.grabFocus(); } } }); pwd.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { String password = new String(pwd.getPassword()); if(password.equalsIgnoreCase("")) { JOptionPane.showMessageDialog(Login.this, "please input a password!"); }else{ ver.grabFocus(); } } }); ok.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // 重新加载最新的账户文件 try { pro.load(new FileInputStream(new File("src/res/accouts.properties"))); } catch (IOException e1) { e1.printStackTrace(); } check(); } }); // 判断验证码是否正确 ver.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { String verCode = ver.getText(); if(verCode.equals("")) { JOptionPane.showMessageDialog(Login.this, "Please input a verification!"); }else{ if(verCode.equals(answer.getResult())) { result.setIcon(new ImageIcon(Login.this.getClass().getResource("/res/right.jpg"))); // 显示提示的图片信息(如√图片) ver_code = true; // 检查之前,重新加载最新的账户文件 try { pro.load(new FileInputStream(new File("src/res/accouts.properties"))); // 将账户文件加载进来 } catch (IOException e1) { e1.printStackTrace(); } check(); }else{ result.setIcon(new ImageIcon(Login.this.getClass().getResource("/res/error.jpg"))); // 显示提示的图片信息(如×图片) ver_code = false; } } } }); // 点击图片会更改验证码 img.addMouseListener(new MouseAdapter(){ @Override public void mouseClicked(MouseEvent e) { answer = Verification.verification(); img.setIcon(new ImageIcon(answer.getBufferedImage())); // 设置验证码图案 } }); cancel.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int option = JOptionPane.showConfirmDialog(Login.this, "Are you sure to exit?"); // System.out.println("option = " + option); if (option == 0) {// Yes Login.this.dispose(); } } }); signUp.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { new SignUp(); } }); } // 初始化登录窗口及其组件的设置监听 public Login() { super("Login"); // 加载账户文件 try { pro.load(new FileInputStream(new File("src/res/accouts.properties"))); // 从指定位置将账户文件加载进来 } catch (IOException e) { e.printStackTrace(); } initListener(); answer = Verification.verification(); // 生成验证码 img.setIcon(new ImageIcon(answer.getBufferedImage())); // 设置初始验证码 this.setLocation(new Point(200, 200)); this.setSize(500, 300); this.setLayout(new GridLayout(4, 1, 0, 20)); // 垂直间隙为20px p1.add(luser); p1.add(username); p2.add(lpwd); p2.add(pwd); p4.add(this.lVer); p4.add(this.ver); p4.add(this.img); result.setForeground(Color.red); result.setFont(new Font("楷体", Font.BOLD, 20)); p4.add(result); p3.add(ok); p3.add(cancel); p3.add(signUp); this.add(p1); this.add(p2); this.add(p4); this.add(p3); // this.setBackground(Color.blue); // JFrame的上层还有一个ContentPane this.getContentPane().setBackground(Color.gray); this.setResizable(false); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 等价于Frame中的windowClosing事件 } // 检查用户名或密码 public void check() { String verCode = ver.getText(); if(verCode.equals("")) { JOptionPane.showMessageDialog(Login.this, "Please input a verification!"); return; }else{ if(verCode.equals(answer.getResult())) { result.setIcon(new ImageIcon(Login.this.getClass().getResource("/res/right.jpg"))); ver_code = true; }else{ result.setIcon(new ImageIcon(Login.this.getClass().getResource("/res/error.jpg"))); ver_code = false; } } if(ver_code == false) { JOptionPane.showMessageDialog(this, "verification is error!"); return; } String name = username.getText(); String password = new String(pwd.getPassword()); // return char[] // if (name.equalsIgnoreCase("admin") && password.equals("123456")) if (isPass(name, password)) { // new PaintApp(name); JOptionPane.showMessageDialog(this, "-^_^- OK..."); // 此处可以加上其他的登陆成功后进一步处理的窗口 this.dispose(); } else { JOptionPane.showMessageDialog(this, "userName or password is incorrect!"); username.setText(""); pwd.setText(""); ver.setText(""); answer = Verification.verification(); img.setIcon(new ImageIcon(answer.getBufferedImage())); result.setIcon(null); } } // 验证用户输入的账户名和密码是否正确(通过与加载进来的账户 pro 比对) public boolean isPass(String name, String password) { Enumeration en = pro.propertyNames(); while(en.hasMoreElements()) { String curName = (String)en.nextElement(); // System.out.println(curName + "---" + pro.getProperty(curName)); if(curName.equalsIgnoreCase(name)) { if(password.equalsIgnoreCase(pro.getProperty(curName))) { return true; } } } return false; } public static void main(String[] args) { new Login(); } }
계정등록 클래스
package ccnu.paint; import java.awt.GridLayout; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Enumeration; import java.util.Properties; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class SignUp extends JFrame { private static final long serialVersionUID = 3054293481122038909L; private Properties pro = new Properties(); // 最好时静态的,因为账户是共享的 private JPanel panel = new JPanel(); private JLabel label = new JLabel("username: "); private JTextField field = new JTextField(15); private JPanel panel2 = new JPanel(); private JLabel label2 = new JLabel("password: "); private JPasswordField field2 = new JPasswordField(15); private JPanel panel3 = new JPanel(); private JLabel label3 = new JLabel("confirmation: "); private JPasswordField field3 = new JPasswordField(15); private JPanel panel4 = new JPanel(); private JButton button = new JButton("OK"); private JButton button2 = new JButton("Cancel"); public void initListener() { field.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { field2.grabFocus(); } }); field2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { field3.grabFocus(); } }); field3.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ok_actionPerformed(e); } }); // OK button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ok_actionPerformed(e); } }); // Cancel button2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { cancel_actionPerformed(e); } }); } public void ok_actionPerformed(ActionEvent e) { String userName = field.getText(); String password = new String(field2.getPassword()); String password2 = new String(field3.getPassword()); if (userName.equals("")) { JOptionPane.showMessageDialog(SignUp.this, "username cannot be empty!"); } else { if (password.equalsIgnoreCase("")) { JOptionPane.showMessageDialog(SignUp.this, "password cannot be empty!"); } else { if (password2.equalsIgnoreCase(password)) { if (isExist(userName)) { JOptionPane.showMessageDialog(SignUp.this, "username has been existed!"); field.setText(""); field2.setText(""); field3.setText(""); } else { pro.setProperty(userName, password); JOptionPane.showMessageDialog(SignUp.this, "SignUp success!"); writeToPro(userName, password); // 将其写入到账户文件中 SignUp.this.dispose(); } } else { JOptionPane.showMessageDialog(SignUp.this, "password is not consistent!"); field2.setText(""); field3.setText(""); } } } } public void cancel_actionPerformed(ActionEvent e) { System.exit(0); } public SignUp() { super("Sign up"); // 加载账户文件 try { pro.load(new FileInputStream(new File("src/res/accouts.properties"))); } catch (IOException e) { e.printStackTrace(); } // 初始化窗口组件的监听 initListener(); this.setLocation(new Point(300, 230)); this.setSize(280, 210); this.setLayout(new GridLayout(4, 1, 0, 20)); // 垂直间隙为20px panel.add(label); panel.add(field); panel2.add(label2); panel2.add(field2); panel3.add(label3); panel3.add(field3); panel4.add(button); panel4.add(button2); this.add(panel); this.add(panel2); this.add(panel3); this.add(panel4); this.setAlwaysOnTop(true); this.setResizable(false); this.setVisible(true); } // 如果注册始终可用,就要保存起来,否则不需要写入文件中,注册账户本次使用 // 将账户名与其对应密码保存到指定的账户文件中 public void writeToPro(String userName, String password) { pro.setProperty(userName, password); try { pro.store(new FileOutputStream(new File("src/res/accouts.properties")), "allAccouts"); } catch (IOException e) { e.printStackTrace(); } } // 判断此用户名是否已经存在 public boolean isExist(String userName) { Enumeration enumer = pro.propertyNames(); while (enumer.hasMoreElements()) { String temp = (String) enumer.nextElement(); if (temp.equals(userName)) { return true; } } return false; } }
인증코드 클래스 생성
package ccnu.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Point; import java.awt.image.BufferedImage; import java.util.Random; // 用于生成验证码 public class Verification { private static Answer answer = new Answer(); private static BufferedImage bufferedImage = null; private static String result = null; private static String words = null; private static String words2 = null; // 生成验证码 public static Answer verification() { bufferedImage = new BufferedImage(200, 35, BufferedImage.TYPE_INT_RGB); Graphics g = bufferedImage.getGraphics(); Random rand = new Random(); for (int i = 0; i < 20; i++) { Point p1 = new Point(rand.nextInt(200), rand.nextInt(30)); Point p2 = new Point(rand.nextInt(200), rand.nextInt(30)); g.drawLine(p1.x, p1.y, p2.x, p2.y); } g.setColor(Color.RED); g.setFont(new Font("楷体", Font.BOLD, 22)); int plan = 2; switch (rand.nextInt(plan)) { case 0: plan(g); break; case 1: plan1(g); break; default: break; } answer.setBufferedImage(bufferedImage); answer.setResult(result); g.dispose(); return answer; } // 方案一 private static void plan(Graphics g) { words = ReadTxt.read("/res/words.txt"); // 指定生成验证码问题的资源文件的路径 Random rand = new Random(); String first = String.valueOf(words.charAt(rand.nextInt(words.length()))); String second = String.valueOf(words.charAt(rand.nextInt(words.length()))); String third = String.valueOf(words.charAt(rand.nextInt(words.length()))); g.drawString(first, rand.nextInt(40) + 20, rand.nextInt(12) + 15); g.drawString(second, rand.nextInt(40) + 80, rand.nextInt(12) + 15); g.drawString(third, rand.nextInt(40) + 140, rand.nextInt(12) + 15); result = first + second + third; } // 方案二 private static void plan1(Graphics g) { words2 = ReadTxt.read("/res/words2.txt"); // 指定生成验证码问题的资源文件的路径 Random rand = new Random(); String first = String.valueOf(words2.charAt(rand.nextInt(words2.length() - 2))); String second = String.valueOf(words2.charAt(rand.nextInt(2) + 9)); String third = String.valueOf(words2.charAt(rand.nextInt(words2.length() - 2))); g.drawString(first, rand.nextInt(30) + 20, rand.nextInt(12) + 15); g.drawString(second, rand.nextInt(40) + 60, rand.nextInt(12) + 15); g.drawString(third, rand.nextInt(30) + 110, rand.nextInt(12) + 15); g.drawString("=", rand.nextInt(40) + 150, rand.nextInt(12) + 15); if(second.equals("+")) { result = String.valueOf(Integer.valueOf(first) + Integer.valueOf(third)); }else{ result = String.valueOf(Integer.valueOf(first) - Integer.valueOf(third)); } } }
인증코드 생성에 필요한 파일 클래스 읽기
package ccnu.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; // 专门用于读取文件 public class ReadTxt { public static String read(String path) // 根据指定路径path来读取它,并返回它所包含的内容 { StringBuffer sb = new StringBuffer(); try { BufferedReader br = new BufferedReader(new InputStreamReader(Verification.class.getResourceAsStream(path))); String temp = null; while(null != (temp = br.readLine())) { sb.append(temp); } br.close(); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); } }
생성된 인증코드 포함 가져오기 정보 (패턴,질문)
package ccnu.util; import java.awt.image.BufferedImage; // 用于将生成的验证码的图案信息以及问题结果封装 public class Answer { private BufferedImage bufferedImage = null; // 验证码图像 private String result = null; // 验证码图像问题的答案 public BufferedImage getBufferedImage() { return bufferedImage; } public void setBufferedImage(BufferedImage bufferedImage) { this.bufferedImage = bufferedImage; } public String getResult() { return result; } public void setResult(String result) { this.result = result; } }
인증코드 생성시 한자 인식 문제에 대한 Words.txt 파일
예: 에서 인증코드의 산술 연산 생성 문제에 대한 Words2.txt 파일 중국 후베이성 우한시 한동대학교 정치외교학부
123456789+-
프롬프트 사진
로그인 효과
위 내용은 Java에서 로그인 창을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

드림위버 CS6
시각적 웹 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.
