java如何实现登录窗口
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容介绍了"java如何实现登录窗口"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!登录窗口主类p
千家信息网最后更新 2025年01月19日java如何实现登录窗口
本篇内容介绍了"java如何实现登录窗口"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
登录窗口主类
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如何实现登录窗口"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
验证
文件
账户
生成
问题
图片
登录
信息
组件
内容
图案
密码
用户
路径
提示
监听
图像
方案
更多
楷体
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术案例设计
软件开发常用软件交流
黑龙江智能软件开发方法
搭服务器翻越
软件开发需求申请函
软件开发规范25010
自动软件开发模式
一般软件开发怎么付费
盘点2017互联网领先科技成果
手机软件开发工具那个好
怎么实现数据库备份
医院数据库备份时间
互联网科技年会标语
英飞软件开发有限公司
dnf服务器灰色
我的世界服务器怎么保护好主城
视频处理软件开发
数据库系统是位于
可以申请网络安全兵吗
俄乌网络安全战
网络技术得选上海百首网络
现代软件开发诚信服务
SQL数据库的安全保护措施
2021工信网络安全条例
专业的运维数据库
数据库的安全性设计要求
奥科网络技术有限公司
数据库搬迁上云特点
笔记本和服务器直连
广州莱宾网络技术有限公司