文档章节

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

北风其凉
 北风其凉
发布于 2015/02/15 23:05
字数 973
阅读 2558
收藏 7

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
博文 497
码字总数 462457
作品 4
朝阳
程序员
加载中

评论(4)

北风其凉
北风其凉

引用来自“foreach”的评论

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

引用来自“cwlmxwb”的评论

数字1-9用个for循环就好了啊
恩,你说得有道理!回去我试下哈 :-)
Fantastic_Show
Fantastic_Show
数字1-9用个for循环就好了啊
My java——JVM(java 虚拟机)一

JVM是Java Virtual Machine(Java虚拟机)的缩写。一般我们在学习java中会用到很多缩写名称,如JRE、JDK、SDK、JAVA SE、JAVA EE、JAVA ME、JAVA FX、还有j2se、j2ee、javaee5,我勒个去!多...

tngou
2013/03/13
0
2
用 JOTM 向Servlet中添加事务

J2EE 除了提供了 servlet 之外,还提供了大量的其它功能。Servlet 开发者们也许难得使用这些功能,不情愿也没有时间用一个超出所需的大型 J2EE 服务器来替换自己的简单的 servlet。然而,依据...

晨曦之光
2012/03/09
0
0
20个设计模式和软件设计面试问题

不管是参加Java面试还是C#面试,设计模式和软件设计都是任何编程面试中的必问问题。实际上,编程能力和设计技巧是对彼此很好的补充。一个好的程序员通常都是一个好的软件设计人员。他们知道怎...

LCZ777
2014/08/13
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
08/08
0
0
新手入门必看的30个问题!!!!!!

看了好多资料,还是对一些基本问题比较头大。在论坛看完这个帖子,脑子里的基本概念有了。 1 什么是Java、Java2、JDK?JDK后面的1.3、1.4.2版本号又是怎么回事? 答:Java是一种通用的,并发的,...

精华之王
2009/04/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

移除或自定义 WordPress 仪表盘欢迎面板

第一次登录 WordPress 后台仪表盘页面,默认都会显示 WordPress 的欢迎面板: 如果我们要移除这个面板,在主题的 functions.php 中添加下面的代码即可: 12 //移除 WordPress 仪表盘欢迎面...

james_laughing
14分钟前
0
0
HashMap实现原理及源码分析

HashMap实现原理及源码分析   哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,...

DemonsI
17分钟前
0
0
eggjs学习笔记

快速初始化 生成项目(要求最低的node版本8.x) npm i egg-init -gegg-init egg-example --type=simplecd egg-examplenpm i 启动项目 npm run dev 配置 环境配置会覆盖默认配置 config...

别人说我名字很长
20分钟前
1
0
Winform Timer控件时间间隔

sender as System.Timers.Timer).Interval = 23 * 60 * 60 * 1000.0;//将时间间隔改为23小时,23小时后重新发生timer_Elapsed事件。 //60000:时间间隔1分钟,300000:时间间隔5分钟,600000:...

笑丶笑
21分钟前
0
0
在win10系统下怎样快速切换任务视图

切换窗口:Alt + Tab 任务视图:Win + Tab (松开键盘界面不会消失) 切换任务视图:Win + Ctrl +左/右 创建新的虚拟桌面:Win + Ctrl + D 关闭当前虚拟桌面:Win + Ctrl + F4...

SummerGao
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部