1. 程序设计思想:
      使用Math.random()方法循环生成6个97~122之间的随机整数(对应ASCII码值‘a’~‘z’),将其转化为char型变量,连接成为一个6位字符串作为验证码输出,提示用户输入。用户输入字符串与验证码相符则提示通过,不相符则提示错误并再次生成随机验证码。
  2. 程序流程图:
  3. 源程序:
     import java.awt.EventQueue;
    import javax.swing.JFrame;
    import java.awt.Color;
    import javax.swing.JPanel;
    import java.awt.BorderLayout;
    import javax.swing.JLabel;
    import javax.swing.JTextField;
    import javax.swing.JPasswordField;
    import javax.swing.JButton;
    import javax.swing.event.*;
    import java.awt.Font;
    public class LoginWindow { private JFrame frame;
    private JPasswordField passwordField; /**
    * Launch the application.
    */
    public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
    public void run() {
    try {
    LoginWindow window = new LoginWindow();
    window.frame.setVisible(true);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    });
    } /**
    * Create the application.
    */
    public LoginWindow() {
    initialize();
    } /**
    * Initialize the contents of the frame.
    */
    private void initialize() {
    frame = new JFrame();
    frame.setBackground(Color.BLUE);
    frame.setBounds(100, 100, 445, 319);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel();
    frame.getContentPane().add(panel, BorderLayout.CENTER);
    panel.setVisible(true);
    panel.setLayout(null); JLabel label = new JLabel("\u767B\u5F55\u540D\uFF1A");  //登录名标签
    label.setFont(new Font("微软雅黑", Font.PLAIN, 18));
    label.setBounds(85, 44, 76, 32);
    panel.add(label); JLabel label_1 = new JLabel("\u5BC6\u7801\uFF1A");  //密码标签
    label_1.setFont(new Font("微软雅黑", Font.PLAIN, 18));
    label_1.setBounds(85, 86, 76, 32);
    panel.add(label_1); JLabel label_2 = new JLabel("\u9A8C\u8BC1\u7801\uFF1A"); //验证码标签
    label_2.setFont(new Font("微软雅黑", Font.PLAIN, 18));
    label_2.setBounds(84, 128, 76, 30);
    panel.add(label_2); JTextField textArea = new JTextField(); //用户名文本框
    textArea.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255,0,0)));
    textArea.setBounds(181, 44, 166, 34);
    panel.add(textArea); passwordField = new JPasswordField(); //密码框
    passwordField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255,0,0)));
    passwordField.setBounds(181, 86, 166, 34);
    panel.add(passwordField); JButton btnNewButton = new JButton("\u767B\u5F55"); //登录按钮
    btnNewButton.setEnabled(false);
    btnNewButton.setBackground(new Color(51, 153, 0));
    btnNewButton.setForeground(Color.BLACK);
    btnNewButton.setBounds(124, 186, 181, 29);
    panel.add(btnNewButton); JButton btnNewButton_1 = new JButton("\u5FEB\u901F\u6CE8\u518C"); //快速注册按钮
    btnNewButton_1.setBackground(new Color(255, 204, 255));
    btnNewButton_1.setBounds(124, 225, 181, 29);
    panel.add(btnNewButton_1); String result = ""; //验证码字符串
    for(int i = 0;i < 6;i++)
    {
    int c = (int)(Math.random() * 26 + 97); //随机生成6个字符
    result = result + (char)c;
    }
    JLabel lblValid = new JLabel(result);
    lblValid.setBounds(277, 134, 70, 22);
    panel.add(lblValid); JTextField textArea_1 = new JTextField(); //验证码输入框
    textArea_1.getDocument().addDocumentListener(new DocumentListener(){ //添加内容改变事件
    public void insertUpdate(DocumentEvent e) {
    if(textArea_1.getText().equals(lblValid.getText())){ //在文本框添加数据
    btnNewButton.setEnabled(true); //验证码正确,登录按钮可用
    }
    else{
    btnNewButton.setEnabled(false); //验证码错误,登录按钮不可用
    }
    }
    public void removeUpdate(DocumentEvent e) { //从文本框删除数据
    if(textArea_1.getText().equals(lblValid.getText())){
    btnNewButton.setEnabled(true); //验证码正确,登录按钮可用
    }
    else{
    btnNewButton.setEnabled(false); //验证码错误,登录按钮不可用
    }
    }
    public void changedUpdate(DocumentEvent e) { }
    }); textArea_1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255,0,0)));
    textArea_1.setBounds(180, 128, 76, 32);
    panel.add(textArea_1);
    }
    }
  4. 实现结果图:
  5. 实验总结:
    • Math.random():产生一个[0,1)之间的随机数。若要产生指定范围[m,n)内随机数,可使用公式Math.random()*(n+1-m) + m。本程序中为产生[97,122]之间随机整数,先使用Math.random()*(122 + 1 - 97) + 97产生一个[97,123)之间的随机数,再进通过类型转换成为整型数据(只保留整数部分)从而得到97~122之间的整数。
    • 通过这次实验,我掌握了Math.random()的用法,了解了Java内类型转换的机制。另外,也初步接触了java的swing组件,熟悉了MyEclipse的设计窗口。
    • 在调试过程中,我遇到的主要问题是如何给文本框添加内容改变事件,通过查找资料找到了正确的方法。相信在以后的学习中会有更深体会。

    参考资料:

    http://www.yiibai.com/swing/home.html

    https://zhidao.baidu.com/question/554112250.html

JAVA语言实现简单登录界面的更多相关文章

  1. Java语言实现简单FTP软件------>FTP软件主界面的实现(四)

    首先看一下该软件的整体代码框架                        1.首先介绍程序的主入口FTPMain.java,采用了一个漂亮的外观风格 package com.oyp.ftp; im ...

  2. Java语言实现简单FTP软件------>源码放送(十三)

    Java语言实现简单FTP软件------>FTP协议分析(一) Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二) Java语言实现简单FTP软件----- ...

  3. Java语言实现简单FTP软件------>上传下载管理模块的实现(十一)

    1.上传本地文件或文件夹到远程FTP服务器端的功能. 当用户在本地文件列表中选择想要上传的文件后,点击上传按钮,将本机上指定的文件上传到FTP服务器当前展现的目录,下图为上传子模块流程图 选择好要上传 ...

  4. 以java实现的一个简单登录界面(带验证码)

    本文参考于:https://blog.csdn.net/wyf2017/article/details/78831744 https://blog.csdn.net/MengKun822/articl ...

  5. Java Web实现用户登录界面

    一.学习Java Web需要的技术: Java语言基础:算法基础.常用数据结构.编程规范. 掌握常见的数据结构和实用算法:培养良好的编程习惯. Java面向对象:封装.继承.多态等,面向对象程序设计, ...

  6. Cookie案例:简单登录界面中的应用

    ServletDemo1.java package ztq.servlet.study; import java.io.IOException; import java.io.PrintWriter; ...

  7. 用Java语言实现简单的词法分析器

    编译原理中的词法分析算是很重要的一个部分,原理比较简单,不过网上大部分都是用C语言或者C++来编写,笔者近期在学习Java,故用Java语言实现了简单的词法分析器. 要分析的代码段如下: 输出结果如下 ...

  8. Java语言的简单基础

    1.Java 是一种高级程序设计语言. 2.Java 是大小敏感的程序语言. 3.Java 中的 public 修饰的类名一般要与文件名相同,但也有特列:内部类. 4.Java 程序能在任何操作系统中 ...

  9. 设计简单登录界面(Java web)

    程序设计思想: 在Input.jsp中创建一个表格里边分别是课程名称,任课老师,教学地点,并分别用三个文本框来接受输入的三个属性, 并传到另外的Jsp页面中,又来接受三个数据,并判断传来的教师,与教室 ...

随机推荐

  1. 229. 求众数 II

    Q: 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2,3] 输出: [3 ...

  2. python如何将自己写的代码打包供他人使用

    背景: 利用setuptools来实现,所以先安装setuptools,其实Python2.7.9及之后的版本都自带安装setuptools了,无需在另外安装 如果没有安装setuptools的直接下 ...

  3. vue生命周期钩子函数详解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_35585701/article/ ...

  4. 【12】(难&精)【DFS】矩阵中的路径

    题目 矩阵中的路径 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一 ...

  5. 输入与输出 Perl 第五章

    1. chmop($line=<STDIN>) ;  #读取下一行,截掉换行符. 2. while(defined($line=<STDIN>) { print " ...

  6. Vue - 如何使用npm run build后的dist文件夹

    脚手架vue cli生成项目后,使用 npm run build 生成了一个dist文件夹(应该是distribution的缩写) 只要放在http服务器上就可以运行. 使用一句python命令可以搭 ...

  7. opencv:Mat对象

    Mat对象:图像文件的内存数据对象 读取为 Mat 对象 读取图像位Mat对象,获取图像的相关信息 #include <opencv2/opencv.hpp> #include <i ...

  8. opencv python:边缘保留滤波(EPF)

    EPF:E边缘,P保留,F滤波 import cv2 as cv import numpy as np def bi_demo(image): # bilateralFilter(src, d, si ...

  9. Bugku-CTF加密篇之告诉你个秘密(ISCCCTF)

    告诉你个秘密(ISCCCTF)   636A56355279427363446C4A49454A7154534230526D6843 56445A31614342354E326C4B4946467A5 ...

  10. 台电X16pro刷机记录

    Android: 如果要刷安卓,需要使用win7系统电脑,且需要安装java环境,同时按住 音量减+电源键进入刷机模式(DNX BOOT MODE..),这时在PhoneFlashTool_5.3.2 ...