LoginGUI.java

LoginGUI.java

完成效果如下图:

CODE

Summary:

This code sets up a login GUI using Swing.

It defines a LoginGUI class extending JFrame.

The constructor initializes the GUI components and sets up event listeners.

The event_login method handles the login logic, displaying messages based on the success or failure of the login attempt.

/*
package com.shiyanlou.view; - This declares the package name.
The import statements import various classes needed for the GUI components and event handling from the javax.swing and java.awt libraries, as well as a custom utility class JDOM.
*/
package com.shiyanlou.view;
​
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
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 javax.swing.border.EmptyBorder;
​
import com.shiyanlou.util.JDOM;
​
/Class Declaration
/*
LoginGUI extends JFrame, which means it is a type of window.
--
serialVersionUID is a unique identifier for the class, used during deserialization.
--
contentPane is a JPanel that acts as the main panel of the frame.
--
IDtxt, Passwdlabel, and passwordField are components for user input and labels.
--
login and back are buttons for submitting the login form and going back to the main window.
*/
public class LoginGUI extends JFrame {private static final long serialVersionUID = 4994949944841194839L;private JPanel contentPane; //面板private JTextField IDtxt; //ID输入框private JLabel Passwdlabel; //密码标签private JPasswordField passwordField; //密码输入框private JButton login;//登录按钮private JButton back;//返回按钮/  Member Method: loginGUI
/*
This method starts the application by creating and displaying the LoginGUI frame in the Event Dispatch Thread, ensuring thread safety.
*//**//*** Launch the application.* @return*/
public void loginGUI() {EventQueue.invokeLater(new Runnable() {public void run() {try {LoginGUI frame = new LoginGUI();frame.setVisible(true);}catch(Exception e) {e.printStackTrace();}}});
}Constructor: LoginGUI
/*
The constructor initializes the frame, sets the default close operation, size, and layout.
--
contentPane is set up as the main panel with a border and null layout for absolute positioning.
--
Labels and text fields (IDlabel, IDtxt, Passwdlabel, passwordField) are created and added to contentPane.
--
The login button is created, with mouse and key event listeners attached to handle clicks and Enter key presses.
--
The back button is created, with a mouse event listener to return to the main window.
A welcome label is added to the frame.
*///构造方法
/*** Create the frame.*/
public LoginGUI() {setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100,100,650,400);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5,5,5,5));setContentPane(contentPane);contentPane.setLayout(null);JLabel IDlabel = new JLabel("Please input ID");//id 标签IDlabel.setBounds(68,170,100,39);contentPane.add(IDlabel);IDtxt = new JTextField();IDtxt.setBounds(220, 179, 126, 21);contentPane.add(IDtxt);IDtxt.setColumns(10);Passwdlabel = new JLabel("Please input password");Passwdlabel.setBounds(68, 219, 150, 50);contentPane.add(Passwdlabel);passwordField = new JPasswordField();passwordField.setBounds(220, 234, 126, 21);contentPane.add(passwordField);login = new JButton("login");//鼠标事件login.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {event_login();//登录事件方法}});//键盘事件login.addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent e) {if(e.getKeyCode() == KeyEvent.VK_ENTER) {//当键盘按enter时调用event_login();//登录事件方}}});login.setBounds(239, 310, 93, 23);contentPane.add(login);//返回按钮back = new JButton("BACK");back.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {IndexGUI.init();setVisible(false);}});back.setBounds(507, 310, 93, 23);contentPane.add(back);//标题JLabel label  = new JLabel("Welcome to use KnowYou");label.setFont(new Font("Ubuntu",Font.BOLD | Font.ITALIC,30));}/event_login
/*
This method handles the login logic when the login button is clicked or Enter is pressed.
--
It retrieves the user ID and password from the input fields.
--
It calls JDOM.read(id, passwd) to validate the credentials.
--
If the login is successful, it displays a welcome message and opens the user GUI (UsersGUI.init(name)).
--
If the login fails, it shows an error message.
*///封装登录事件
private void event_login() {//这里的登录事件方法暂不处理,日后补充。String id = IDtxt.getText();String passwd = new String(passwordField.getPassword());String flag = JDOM.read(id, passwd);if(flag.contains("Successful landing")) {//拆分信息String[] bufs = flag.split("/");String name = bufs[1];//提示框,打印登录成功JOptionPane.showMessageDialog(contentPane, "Welcome: "+name,"Welcome", JOptionPane.PLAIN_MESSAGE);UsersGUI.init(name);setVisible(false);}else {//提示框,错误信息JOptionPane.showMessageDialog(contentPane, flag,"ERROR",JOptionPane.ERROR_MESSAGE);}
}
}

tips:

understanding the details of the code is crucial for a Java developer. Knowing the specifics allows you to:

  1. debug effectively

  2. write better code

  3. understand others' code

  4. optimize performance

  5. implement features

Event Dispatch Thread

javaCopy codeEventQueue.invokeLater(new Runnable() {public void run() {try {LoginGUI frame = new LoginGUI();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}
});
  • Purpose: Ensures that the creation and updating of GUI components happen on the Event Dispatch Thread (EDT), which is the thread responsible for handling GUI events in Swing.

  • Details

    :

    • EventQueue.invokeLater(Runnable runnable): Schedules the specified Runnable to be executed on the EDT.

    • new Runnable() { public void run() { ... } }: Defines the Runnable's run method, which is executed on the EDT.

    • LoginGUI frame = new LoginGUI();: Creates an instance of LoginGUI.

    • frame.setVisible(true);: Makes the frame visible.

Constructor: LoginGUI

javaCopy codesetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 650, 400);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
  • Purpose: Sets up the main window and its content pane.

  • Details

    :

    • setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);: Specifies that the application should exit when the window is closed.

    • setBounds(int x, int y, int width, int height);: Sets the position and size of the frame.

    • contentPane = new JPanel();: Initializes contentPane.

    • contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));: Adds an empty border with 5-pixel padding around the contentPane.

    • setContentPane(contentPane);: Sets contentPane as the content pane for the frame.

    • contentPane.setLayout(null);: Uses absolute positioning for the layout of contentPane.

Adding Components

javaCopy codeJLabel IDlabel = new JLabel("Please input ID");
IDlabel.setBounds(68, 170, 100, 39);
contentPane.add(IDlabel);
​
IDtxt = new JTextField();
IDtxt.setBounds(220, 179, 126, 21);
contentPane.add(IDtxt);
IDtxt.setColumns(10);
  • Purpose: Adds a label and a text field for user ID input.

  • Details

    :

    • JLabel IDlabel = new JLabel("Please input ID");: Creates a label with the specified text.

    • IDlabel.setBounds(int x, int y, int width, int height);: Sets the position and size of the label.

    • contentPane.add(IDlabel);: Adds the label to contentPane.

    • IDtxt = new JTextField();: Creates a text field for user input.

    • IDtxt.setBounds(int x, int y, int width, int height);: Sets the position and size of the text field.

    • contentPane.add(IDtxt);: Adds the text field to contentPane.

    • IDtxt.setColumns(int columns);: Sets the number of columns in the text field, affecting its preferred width.

Event Listeners

javaCopy codelogin.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {event_login();}
});
​
login.addKeyListener(new KeyAdapter() {public void keyPressed(KeyEvent e) {if (e.getKeyCode() == KeyEvent.VK_ENTER) {event_login();}}
});
  • Purpose: Attaches event listeners to the login button for handling mouse clicks and key presses.

  • Details

    :

    • login.addMouseListener(new MouseAdapter() { ... });: Adds a mouse listener to handle mouse events.

    • mouseClicked(MouseEvent e): Called when the login button is clicked.

    • event_login();: Calls the event_login method to handle the login process.

    • login.addKeyListener(new KeyAdapter() { ... });: Adds a key listener to handle key events.

    • keyPressed(KeyEvent e): Called when a key is pressed while the login button is focused.

    • if (e.getKeyCode() == KeyEvent.VK_ENTER) { ... }: Checks if the Enter key was pressed.

Event Handling Method: event_login

javaCopy codeprivate void event_login() {String id = IDtxt.getText();String passwd = new String(passwordField.getPassword());String flag = JDOM.read(id, passwd);if (flag.contains("Successful landing")) {String[] bufs = flag.split("/");String name = bufs[1];JOptionPane.showMessageDialog(contentPane, "Welcome: " + name, "Welcome", JOptionPane.PLAIN_MESSAGE);UsersGUI.init(name);setVisible(false);} else {JOptionPane.showMessageDialog(contentPane, flag, "ERROR", JOptionPane.ERROR_MESSAGE);}
}
  • Purpose: Handles the login process by validating user credentials.

  • Details

    :

    • String id = IDtxt.getText();: Retrieves the user ID from the text field.

    • String passwd = new String(passwordField.getPassword());: Retrieves the password from the password field.

    • String flag = JDOM.read(id, passwd);: Calls a method from JDOM to validate the credentials and returns a result string.

    • if (flag.contains("Successful landing")) { ... }: Checks if the login was successful.

    • String[] bufs = flag.split("/");: Splits the result string to extract the user's name.

    • String name = bufs[1];: Gets the user's name.

    • JOptionPane.showMessageDialog(contentPane, "Welcome: " + name, "Welcome", JOptionPane.PLAIN_MESSAGE);: Displays a welcome message.

    • UsersGUI.init(name);: Initializes the user GUI with the user's name.

    • setVisible(false);: Hides the login window.

    • else { ... }: Displays an error message if the login failed.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/27890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MacOS安装redis

文章目录 前言一、介绍二、下载三、安装四、启动五、配置六、Redis 可视化工具下载七、配置详解八、常用命令总结 前言 Redis因其高性能和低延迟而成为现代应用程序的理想选择,尤其适合需要快速读写操作的场景。随着技术的不断发展,Redis继续在性能、功…

电机控制安全:PWM 直通

在 H 桥中使用互补 PWM 时的一个主要考虑因素是短路的可能性,也称为“击穿”。 如图 5 所示,如果同一支路上的两个开关同时打开,H 桥配置可能会导致电源和接地之间发生直接短路。 如果同一条腿上的两个开关同时打开,则可能会发生…

ArcGIS 10.2软件安装包下载及安装教程!

今日资源:ArcGIS 适用系统:WINDOWS 软件介绍: ArcGIS是一款专业的电子地图信息编辑和开发软件,提供一种快速并且使用简单的方式浏览地理信息,无论是2D还是3D的信息。软件内置多种编辑工具,可以轻松的完成…

区间预测 | Matlab实现BP-ABKDE的BP神经网络自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现BP-ABKDE的BP神经网络自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现BP-ABKDE的BP神经网络自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现BP-ABKDE的BP神经网络自适应带…

基于Matlab的人脸表情识别系统(GUI界面)【W4】

简介: 该系统是一个基于Matlab开发的人脸表情识别应用程序,旨在识别输入图像中的人脸表情,并通过直观的图形用户界面(GUI)向用户展示识别结果。系统结合了图像处理、机器学习和用户交互技术,使用户能够轻松…

攻防世界-fakebook题目__详解

1.打开题目先用dirsearch工具扫描一波,扫出来了robots.php目录,然后访问robots.txt 目录,发现了有一个备份文件 ,访问备份文件,下载内容 文件的大致内容如下 里面有一个curl_exec这个函数容易造成ssrf攻击的漏洞 我…

基于微信小程序的童书购买系统的设计与实现

基于微信小程序的童书购买系统的设计与实现 摘 要 《“十三五”规划》第一次把“保障妇女、未成年人、残疾人的基本权利”作为重要内容,充分体现了党和国家对广大人民群众的关心,为广大人民群众营造了良好的学习氛围,并出台多项文件及政策&…

斯坦福ALOHA机器人团队最新论文-HumanPlus: 从人类学习的人形机器人动作模仿和自主操作

斯坦福ALOHA机器人团队最新论文-HumanPlus,继续推进了机器人技术的前沿进展,我进行了部分翻译和解读: HumanPlus人形机器人系统技术解读 1 简介 本教程将介绍一个名为HumanPlus的全栈式人形机器人系统。该系统能够让机器人从人类数据中学习…

【MySQL】(基础篇十二) —— 子查询

分组数据 本文介绍什么是子查询以及如何使用它们。 SQL允许我们创建子查询(subquery),即嵌套在其他查询中的查询。这样可以实现更复杂的查询,理解这个概念的最好方法是考察几个例子。 利用子查询进行过滤 需求:查询…

Python设计模式 - 简单工厂模式

定义 简单工厂模式是一种创建型设计模式,它通过一个工厂类来创建对象,而不是通过客户端直接实例化对象。 结构 工厂类(Factory):负责创建对象的实例。工厂类通常包含一个方法,根据输入参数的不同创建并返…

React+TS前台项目实战(七)-- 全局常用组件Select封装

文章目录 前言Select组件1. 功能分析2. 代码详细注释说明3. 使用方式4. 效果展示(1)鼠标移入效果(2)下拉框打开效果(3)回调输出 总结 前言 今天这篇主要讲全局select组件封装,可根据UI设计师要…

网络通信的两大支柱:TCP与UDP协议详解(非常详细)零基础入门到精通,收藏这一篇就够了

在构建现代互联网通信的基石中,TCP(传输控制协议)和UDP(用户数据报协议)起着至关重要的作用。本文将深入探讨两者的区别及应用场景。 1 TCP和UDP的共同点 传输层协议: TCP和UDP都是传输层协议&#xff…

紫光展锐5G处理器T750__国产手机芯片5G方案

展锐T750核心板采用6nm EUV制程工艺,CPU架构采用了八核设计,其中包括两个主频为2.0GHz的Arm Cortex-A76性能核心和六个主频为1.8GHz的A55小核。这种组合使得T750具备卓越的处理能力,并能在节能的同时提供出色的性能表现。该核心模块还搭载了M…

L51--- 144. 二叉树的前序遍历(深搜)---Java版

1.题目描述 2.思路 二叉树的前序遍历遵循 根左右 (1)方法 preorderTraversal 输入参数: TreeNode root root是二叉树的根节点。 返回值: List 返回一个包含二叉树节点值的列表,这些值按照前序遍历的顺序排列。 功能: 这个方法是前序遍历的…

微信小程序04: 获取openId和unionId

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 上文小总结1.1.2 上文传送门 2. 获取openId和unionId操作2.1 准备工作2.1.1 请先复制00篇的统一封装代码2.1.2 微信登录请求dto 2.2 具体代码使用与注释如下2.2.1 业务代码2.2.2 代码解释(一)[无需复制]2.2.3 获取的map使用方…

值传递和址传递

值传递 上面的代码是想要交换x,y的值,把x,y传递给swap函数之后,执行下面的操作: 在swap中a和b交换了,但是和x,y没有关系,所以x,y在main中不会变。 址传递 下面再看把x…

2024FIC决赛

容器密码:2024Fic~Competition~Finals杭州&Powered~By~HL! 案件背景: 2023年3月15日凌晨,受害人短视频平台上看到一段近期火爆的交通事故视频,留言后有人通过私信联系,称有一个赚大钱的机会,该人自称李某,提议让…

软件工程期末复习题

目录 选择 判断 选择 下列说法中正确的是 ( B )。 A、20 世纪50 年代提出了软件工程的概念摇 B、20 世纪60 年代提出了软件工程的概念 C、20 世纪70 年代出现了客户端/ 服务器技术 D、20 世纪80 年代软件工程学科达到成熟 软件危机的主要原因是 ( D )。 A、软件工具落后…

基于STM32移植U8g2图形库——OLED显示(HAL库)

文章目录 一、U8g2简介1、特点2、U8g2的使用步骤 二、I2C相关介绍1、I2C的基本原理2、I2C的时序协议 三、OLED屏的工作原理四、汉字点阵显示原理五、建立STM32CubeMX工程六、U8g2移植1、U8g2源码2、移植过程 七、代码编写1、参考博主实现的U82G的demo例程(1&#xf…

【Linux内核】伙伴系统算法和slab分配器(1)

【Linux内核】伙伴系统算法和slab分配器(1) 目录 【Linux内核】伙伴系统算法和slab分配器(1)伙伴系统(buddy)算法伙伴系统算法基本原理内存申请内存回收 接口函数源码分析内存分配接口物理内存释放接口规范…