文档章节

Java学习:一个仿ATM机键盘做的密码输入

北风其凉
 北风其凉
发布于 2015/02/15 23:05
字数 973
阅读 2552
收藏 7
点赞 1
评论 4

1.程序运行截图:

2.程序实现的功能

1)进入程序时,程序会询问你输入一个密码

2)进入键盘界面后,按下数字0-9可以输入一个字符,按取消按钮可以退出程序,重置按钮可以将上面的JPasswordField变为空,按下确定按钮,提示输入的密码是否正确

3.程序代码

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import javax.swing.*;

public class FrameTest_20150214 
{
    //密码
    public static char[] correctPassword = {'1', '2', '3', '4', '5', '6'};
    
    public static void main(String[] args) 
    {    
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                //输入一个密码,要求密码全部为数字组成
                boolean isNumber = false;
                String inputPassword = "";
                while(!isNumber)
                {
                    inputPassword = JOptionPane.showInputDialog("请输入一个密码");
                    isNumber = inputPassword.matches("[0-9]+");
                }
                
                correctPassword = inputPassword.toCharArray();
                
                //打开窗体
                TestFrame testFrame = new TestFrame(correctPassword);
                testFrame.setVisible(true);
            }
        });
    }
}

//密码输入窗体
class TestFrame extends JFrame
{
    private static final long serialVersionUID = 1L;
    private static final int DEFAULT_WIDTH = 600;
    private static final int DEFAULT_HEIGHT = 400;

    //密码输入框
    JPasswordField psdDisplay;

    //数字键盘容器
    JPanel panel;

    //数字键盘上的按钮
    JButton btnNum1;   //按键1
    JButton btnNum2;   //按键2
    JButton btnNum3;   //按键3
    JButton btnNum4;   //按键4
    JButton btnNum5;   //按键5
    JButton btnNum6;   //按键6
    JButton btnNum7;   //按键7
    JButton btnNum8;   //按键8
    JButton btnNum9;   //按键9
    JButton btnNum0;   //按键0
    JButton btnDot;    //小数点
    JButton btnNum00;  //按键00
    JButton btnOK;     //确认
    JButton btnCancel; //取消
    JButton btnReset;  //重置
    
    //正确的密码
    private char[] correctPassword;
    
    //构造函数
    public TestFrame(char[] password)
    {
        correctPassword = password;
        
        SetTestFrame();
        SetControls();
    }
    
    //设置窗体
    private void SetTestFrame()
    {
        //窗口大小
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

        //窗口居中
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
        setLocation(
            (dim.width - getSize().width) / 2, 
            (dim.height - getSize().height) / 2);
        
        //标题
        setTitle("This is a Frame for test!");
        
        //使窗体边界无法改变(也无法进行最大化)
        setResizable(false);

        //关闭窗口时退出程序
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    //设置控件
    private void SetControls()
    {
        setLayout(new BorderLayout());
        
        //密码输入框
        psdDisplay = new JPasswordField();
        psdDisplay.setEchoChar('*');
        psdDisplay.setHorizontalAlignment(JTextField.CENTER);
        psdDisplay.setFont(new Font("Times New Roman", Font.BOLD, 60));
        psdDisplay.setEditable(false);
        add(psdDisplay, BorderLayout.NORTH);
        
        //要绑定的事件
        InsertNumberAction insertNumber = new InsertNumberAction();
        OkCommandAction okCommand = new OkCommandAction();
        CancelCommandAction cancelCommand = new CancelCommandAction();
        ResetCommandAction resetCommand = new ResetCommandAction();
        
        //输入键盘
        panel = new JPanel();
        panel.setLayout(new GridLayout(4, 4));
        
        //数字7
        btnNum7 = new JButton("7");
        btnNum7.setFont(new Font("Andalus", Font.BOLD, 60));
        btnNum7.addActionListener(insertNumber);
        panel.add(btnNum7);

        //数字8
        btnNum8 = new JButton("8");
        btnNum8.setFont(new Font("Andalus", Font.BOLD, 60));
        btnNum8.addActionListener(insertNumber);
        panel.add(btnNum8);

        //数字9
        btnNum9 = new JButton("9");
        btnNum9.setFont(new Font("Andalus", Font.BOLD, 60));
        btnNum9.addActionListener(insertNumber);
        panel.add(btnNum9);
        
        //取消按钮
        btnCancel = new JButton("取消");
        btnCancel.setForeground(Color.RED);
        btnCancel.setFont(new Font("宋体", Font.BOLD, 40));
        btnCancel.addActionListener(cancelCommand);
        panel.add(btnCancel);

        //数字4
        btnNum4 = new JButton("4");
        btnNum4.setFont(new Font("Andalus", Font.BOLD, 60));
        btnNum4.addActionListener(insertNumber);
        panel.add(btnNum4);

        //数字5
        btnNum5 = new JButton("5");
        btnNum5.setFont(new Font("Andalus", Font.BOLD, 60));
        btnNum5.addActionListener(insertNumber);
        panel.add(btnNum5);

        //数字6
        btnNum6 = new JButton("6");
        btnNum6.setFont(new Font("Andalus", Font.BOLD, 60));
        btnNum6.addActionListener(insertNumber);
        panel.add(btnNum6);

        //重置按钮
        btnReset = new JButton("重置");
        btnReset.setForeground(Color.BLUE);
        btnReset.setFont(new Font("宋体", Font.BOLD, 40));
        btnReset.addActionListener(resetCommand);
        panel.add(btnReset);

        //数字1
        btnNum1 = new JButton("1");
        btnNum1.setFont(new Font("Andalus", Font.BOLD, 60));
        btnNum1.addActionListener(insertNumber);
        panel.add(btnNum1);

        //数字2
        btnNum2 = new JButton("2");
        btnNum2.setFont(new Font("Andalus", Font.BOLD, 60));
        btnNum2.addActionListener(insertNumber);
        panel.add(btnNum2);

        //数字3
        btnNum3 = new JButton("3");
        btnNum3.setFont(new Font("Andalus", Font.BOLD, 60));
        btnNum3.addActionListener(insertNumber);
        panel.add(btnNum3);

        //空按钮
        panel.add(new JButton(""));

        //小数点(摆设)
        btnDot = new JButton(".");
        btnDot.setFont(new Font("Andalus", Font.BOLD, 60));
        panel.add(btnDot);

        //数字0
        btnNum0 = new JButton("0");
        btnNum0.setFont(new Font("Andalus", Font.BOLD, 60));
        btnNum0.addActionListener(insertNumber);
        panel.add(btnNum0);

        //数字00(摆设)
        btnNum00 = new JButton("00");
        btnNum00.setFont(new Font("Andalus", Font.BOLD, 60));
        panel.add(btnNum00);

        //确定按钮
        btnOK = new JButton("确定");
        btnOK.setForeground(Color.GREEN);
        btnOK.setFont(new Font("宋体", Font.BOLD, 40));
        btnOK.addActionListener(okCommand);
        panel.add(btnOK);

        add(panel, BorderLayout.CENTER);
    }
    
    //按下数字按钮触发的事件
    private class InsertNumberAction implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            psdDisplay.setText(String.valueOf(psdDisplay.getPassword()) + 
                event.getActionCommand());
        }
    }

    //按下确定按钮触发的事件
    private class OkCommandAction implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            char[] inputPassword = psdDisplay.getPassword(); 
            boolean isMatch = true;
            
            //密码长度需要相同
            if (inputPassword.length != correctPassword.length)
            {
                isMatch = false;
            }

            //密码长度相同的情况下各位要一致
            if (isMatch)
            {
                isMatch = Arrays.equals(inputPassword, correctPassword);
            }
            
            if (isMatch)
            {
                JOptionPane.showMessageDialog(null, "密码正确!", "提示信息", 
                    JOptionPane.INFORMATION_MESSAGE);
            }
            else
            {
                JOptionPane.showMessageDialog(null, "密码错误", "错误信息", 
                    JOptionPane.ERROR_MESSAGE);
                psdDisplay.setText("");
            }
        }
    }

    //按下取消按钮触发的事件
    private class CancelCommandAction implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            JOptionPane.showMessageDialog(null, "即将退出程序", "提示信息", 
                JOptionPane.INFORMATION_MESSAGE);
            System.exit(0);
        }
    }

    //按下重置按钮触发的事件
    private class ResetCommandAction implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {
            psdDisplay.setText("");
        }
    }
}

END

© 著作权归作者所有

共有 人打赏支持
北风其凉

北风其凉

粉丝 114
博文 493
码字总数 462457
作品 4
朝阳
程序员
加载中

评论(4)

北风其凉
北风其凉

引用来自“foreach”的评论

怎么想起写这个了?
学java的时候写点东西练手用的 :-)
foreach
foreach
怎么想起写这个了?
北风其凉
北风其凉

引用来自“cwlmxwb”的评论

数字1-9用个for循环就好了啊
恩,你说得有道理!回去我试下哈 :-)
Fantastic_Show
Fantastic_Show
数字1-9用个for循环就好了啊
Java编程语言:学JAVA没有基础,给你4个方向少走弯路。

Java java常常跟"企业"联系在一起, 因为具备一些很好的语言特性, 以及丰富的框架, 在企业应用中最被青睐, 你总可以听到关于J2EE, JSP, Hibernate之类的东西的讨论. 同时, java在手机领域也有...

启示录是真的 ⋅ 05/24 ⋅ 0

关于Java编程基础学习输入输出IO的问题

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

java基础io流——配角也风流(不求甚解)

本章简单介绍几个常见的io流派生。 1:数据操作流(操作基本类型数据的流)(理解) 代码示例: 2:内存操作流(理解) 用于处理临时存储信息的,程序结束,数据就从内存中消失。 代码示例: 注:查看...

潇潇漓燃 ⋅ 05/30 ⋅ 0

做几道基础的Java测试题,看看最近有进步吗?欢迎来学习

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

启示录是真的 ⋅ 05/24 ⋅ 0

Java多线程学习(五)线程间通信知识点补充

系列文章传送门: Java多线程学习(一)Java多线程入门 Java多线程学习(二)synchronized关键字(1) java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Ja...

一只蜗牛呀 ⋅ 04/16 ⋅ 0

Java程序员如何高效而优雅地入门Cpp?

java切入到cpp的学习,首先会具备以下几个优势点 1.没有初学编程语言的恐惧感 毕竟作为过来人切入新的编程语言的学习,驾轻就熟学习的套路上都已经很熟悉了,如果是中级的java程序员切入进来...

启示录是真的 ⋅ 05/27 ⋅ 0

Java小白进阶笔记(3)-初级面向对象

继续学习: 4.偏头痛杨的Java入门教学系列之初级面向对象篇 分割线中为原文的摘录: 面向过程编程&面向对象编程 从面向过程到面向对象,不仅仅是编程方式的改变,更重要的是思维方式的改变。...

kissjz ⋅ 04/20 ⋅ 0

Java程序员必读书单,家族又添新成员

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 有些革命出其不意地吸引了全世界的眼球。Twitter、Linux操作系统和...

异步社区 ⋅ 05/09 ⋅ 0

JAVA基础题,面试中给出正确答案的人数不到32%

首先抛出问题 - “这段程序的运行结果是什么” 题目- 全部代码,仔细审题哦 期待的运行结果: i=1 i=2 i=4 i=3 ... ..说实话我是一名搬运工,我知道你们都不缺这样的视频教程,但是我知道你们...

启示录是真的 ⋅ 05/27 ⋅ 0

sharding-jdbc源码分析—准备工作

原文作者:阿飞Javaer 原文链接:https://www.jianshu.com/p/7831817c1da8 接下来对sharding-jdbc源码的分析基于tag为源码,根据sharding-jdbc Features深入学习sharding-jdbc的几个主要特性...

飞哥-Javaer ⋅ 05/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

Spring JDBC使用方法

普通实现: 1、创建数据表customer。 可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。 2、创建Customer pojo。 Customer类的属性对应数据库的属性,除了为每...

霍淇滨 ⋅ 今天 ⋅ 0

Contos 7 安装Jenkins

Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤 开发 提交 编译 测试 发布 有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动...

欧虞山 ⋅ 今天 ⋅ 0

revel

revel install go get github.com/revel/revelgo get github.com/revel/cmd create new app revel new git.oschina.net/zdglf/myapp run app revel run git.oschina.net/zdglf/myapp ot......

zdglf ⋅ 今天 ⋅ 0

49. Group Anagrams - LeetCode

Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List<String>> groupAnagrams(String[] strs) { Map<Strin......

yysue ⋅ 今天 ⋅ 0

spring Email

使用spring发Email其实就是使用spring自己封装携带的一个javamail.JavaMailSenderImpl类而已。这个类可以当一个普通的java对象来使用,也可以通过把它配置变成spring Bean的方式然后注入使用...

BobwithB ⋅ 今天 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 今天 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部