绝对布局是指直接采用坐标指定的方式在容器中创建窗口,这种方式比较灵活

采用这种方法创建布局的方式主要有以下几步:

  1. 使用Container.setLayout(null)的方式取消布局管理器
  2. 使用Compon.setBounds()的方式来设置每个组件的大小
下面先上代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class UseCase3 extends JFrame {/****/private static final long serialVersionUID = 1L;public UseCase3() {setTitle("登录窗体");setBounds(300, 200, 300, 150);//绝对布局,不使用布局管理器Container cp = getContentPane();cp.setLayout(null);JLabel jl = new JLabel("用户名:");jl.setBounds(10, 10, 200, 18);final JTextField name = new JTextField();name.setBounds(80, 10, 150, 18);JLabel jl2 = new JLabel("密码:");jl2.setBounds(10, 50, 200, 18);final JPasswordField password = new JPasswordField();password.setBounds(80, 50, 150, 18);cp.add(jl);cp.add(name);cp.add(jl2);cp.add(password);JButton jb = new JButton("确定");jb.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {if (name.getText().trim().length() == 0|| new String(password.getPassword()).trim().length() == 0) {JOptionPane.showMessageDialog(null, "用户名密码不允许为空");return;}if (name.getText().trim().equals("mr")&& new String(password.getPassword()).trim().equals("mrsoft")) {JOptionPane.showMessageDialog(null, "登录成功");} else {JOptionPane.showMessageDialog(null, "用户名或密码错误");}}});jb.setBounds(80, 80, 60, 18);cp.add(jb);final JButton button = new JButton();button.setText("重置");button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {// TODO 自动生成方法存根name.setText("");password.setText("");}});button.setBounds(150, 80, 60, 18);getContentPane().add(button);setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);setVisible(true);}public static void main(String[] args) {new UseCase3();}}

下面我来简易分析一下代码的逻辑

  1. 首先使用了seTtitle()方法来命名窗口的名称
  2. 接下来设置了窗口的大小
  3. 定义了一个容器
  4. 接下来就是来定义在窗口上的各种组件
  5. 最后要记得使用add()方法把组件添加到容器上去
  6. 密码验证功能的核心实现:这里只是简单的密码验证,并不涉及到过多的算法,下面着重看一下密码验证部分:

public void actionPerformed(ActionEvent arg0) {if (name.getText().trim().length() == 0|| new String(password.getPassword()).trim().length() == 0) {JOptionPane.showMessageDialog(null, "用户名密码不允许为空");return;}if (name.getText().trim().equals("mr")&& new String(password.getPassword()).trim().equals("mrsoft")) {JOptionPane.showMessageDialog(null, "登录成功");} else {JOptionPane.showMessageDialog(null, "用户名或密码错误");}}

getText()来获取输入的密码文本,trim()来去除两边多余的空格,首先我们需要判断这个框里有东西,这就用到了length()==0的验证方法,这个不难。
后面用到的JOptionPane()方法里面的null可以理解为直接获取返回值,不用过多的去管它。
可以看到后面所谓的“登录验证”无非就是用户名与所设密码的一个与运算罢了,两个都符合的话就可以登陆了(此实例中并不涉及到后台接口的相关问题)

用户输入错误的密码怎么办呢?

这里提供一个快速重置的方法,先上代码:

final JButton button = new JButton();button.setText("重置");button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {// TODO 自动生成方法存根name.setText("");password.setText("");

可以看到,无非就是提供了一个所谓的重置按钮,触发的事件是将name与password里的名称重置为空字符串,这样就完成了重置的作用,不过也可以将密码和账号名单独分开,这样对用户来说比较友好,毕竟不是所有人都会同时输错密码与账号

最后一调用,结果就出来了

 public static void main(String[] args) {new UseCase3();}

GUI界面如下:

使用绝对布局的方法创建一个登录密码验证的简易窗口相关推荐

  1. vue 创建一个登录界面

    vue创建一个登录界面 (1)创建登录界面和主页 (2)配置路由 (3)配置main.js (4)配置App.vue (5)登录页面 (6)主页面 用到的组件 参考链接 (1)创建登录界面和主页 打开 ...

  2. 12-1 蓝色天空 : 创建一个背景为蓝色的Pygame窗口 12-2 游戏角色 : 找一幅你喜欢的游戏角色位图图像或将一幅图像转换为位图。 创建一个类, 将该角色绘制到屏幕中央, 并将该图像的背景色

    12-1 蓝色天空 : 创建一个背景为蓝色的Pygame窗口 import sys import pygame def run_game():pygame.init()screen = pygame. ...

  3. 如何创建一个没有密码的加密文件夹

    就像这样 using System; using System.Collections.Generic; using System.IO; using System.Windows;namespace ...

  4. BCrypt管理员登录密码验证

    一.简单入门测试 BCrypt不支持反运算,只支持密码校验 package com.william.test;import org.springframework.security.crypto.bc ...

  5. SilverLight学习笔记--如何在xaml文件中操作用户在后台代码定义的类(2)--示例篇:创建一个登录控件(原创)(转载本文请注明出处)...

    本文将示例如何运用前篇所写知识来建立一个用户自定义的登录控件.此控件界面非常简单,主要涉及的知识点是:   如何创建用户控件(包括对此控件的自定义事件和属性的编写,此处我们将创建一个名为LoginBo ...

  6. java http连接_Java中通过方法创建一个http连接并请求(服务器间进行通信)

    服务器间进行通信只能通过流(Stream)的方式进行,不能用方法的返回值. 1.Java代码创建一个连接并请求该连接返回的数据 doGet()方法,execute()方法中调用 package dem ...

  7. Tin使用方法 - 创建一个 Tin 应用

    支持的来源 我们可以通过多个来源创建一个 Tin 应用: Docker Image Docker Compose Dockerfile Source Code Docker Image 需要设置应用基 ...

  8. 如何(以及为什么需要)创建一个好的验证集

    2020-02-08 07:58:00 作者:Rachel Thomas 编译:ronghuaiyang 导读 验证集的划分真的就是调用一个train_test_split函数这么简单么,其实并不是. ...

  9. 机器学习技巧:如何(以及为什么需要)创建一个好的验证集

    作者:Rachel Thomas   编译:ronghuaiyang 导读 验证集的划分真的就是调用一个train_test_split函数这么简单么,其实并不是. 一个非常常见的场景:一个看起来非常 ...

最新文章

  1. oracle中SQL语句ge的用法,Oracle中SQL语句的几种用法
  2. 2016 、12 、11本周
  3. 计算机应用基础东师,2018年东师计算机应用基础.doc
  4. 利用反射搭建orm框架
  5. github入门必备概念
  6. boost::proto模块实现构建算术表达式的简单示例 带有占位符的评估器的测试程序
  7. 抽签小程序(C语言随机数),C# 抽签小程序
  8. @async 默认线程池_SpringBoot 线程池的使用
  9. 该伙伴事务管理器已经禁止了它对远程/网络事务的支持
  10. slab中记录空闲对象
  11. 基于3DGIS+BIM的智慧园区运维管理平台
  12. Wpa_supplicant 调试故障原因分析
  13. Dell电脑插入耳机没反应 解决办法
  14. excel如何快速批量翻译单词
  15. Tessent scan ATPG(7) 设计规则检查 (DRC)
  16. 高德地图画带箭头的线_带插头矿用拉力电缆驻当涂县销售处
  17. Android制造 FaceID [FaceNet + MobileNet]
  18. 编译原理 ML语言的初次接触(龙书)
  19. Java抽奖问题(避免重复)
  20. 仿iphone快速导航悬浮球

热门文章

  1. Struts项目中,检测用户名是否被占用/查询账户名称是否被占用/查询账户名称是否已被注册/检查用户名是否被注册
  2. Java中的关键字this_super
  3. Mach 微内核的命名趣闻
  4. arch linux arm下载_arm开发板运行hello word的详细过程
  5. @cacheable 是否缓存成功_缓存策略:如何使用缓存来减少磁盘IO?
  6. linux 内核 性能,Linux内核十个版本性能对比
  7. python判断相同,Python判断两个文件是否相同与两个文本进行相同项筛选的方法
  8. three.js加载3d模型_基于WebGL的3D技术在网页中的运用 ThingJS 前端开发
  9. android 冰箱 活动,Android活动的使用
  10. c程序怎么改为java程序_如何将Java程序的入口点更改为C签名?