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

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

时间: 2024-08-07 15:01:50

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

生活娱乐 ATM机键盘余温泄露密码

安全系统存漏洞 ATM机键盘余温或泄露密码 ATM机会泄露你的银行卡密码? 据美国<大众科学>网站8月30日报道,你的手指在ATM机上留下的余温能让尾随你而来的黑客准确获知你的密码. 加利福尼亚大学圣地亚哥分校的研究小组在近日发表的论文中指出,你在ATM机上键入的密码会以你手指余温的形式留下线索.紧随在你身后的ATM使用者用数码红外摄相机就可以确定你按了哪些键,准确率在80%左右.即使在一分钟之后,摄相机还会有50%的准确率. 虽然罪犯能用红外摄相机测定你按了哪些键,不过要确定(按键的)顺序却

Java学习笔记--HashMap中使用object做key的问题【转载】

在HashMap中,如果需要使用多个属性组合作为key,可以将这几个属性组合成一个对象作为key.但是存在的问题是,要做get时,往往没办法保存当初put操作时的key object的reference,此时,需要让key object覆盖如下hashCode()和equals(Object obj)的实现.sample code如下: public class TestKeyObject { private long id; private int type; public TestKeyOb

一个swift版简单的用户名和密码输入textField

http://www.code4app.com/thread-31992-1-1.html 常见的动画提交按钮 http://www.code4app.com/thread-32239-1-1.html 原文地址:https://www.cnblogs.com/sundaysme/p/11178954.html

N天学习一个Linux命令之帮助命令:man

前言 工作中每天都在使用常用的命令和非常用的命令,忘记了用法或者参数,都会bing一下,然后如此循环.一直没有真正的系统的深入的去了解命令的用法,我决定打破它.以前看到有人,每天学习一个linux命令,我现在没有这么充足时间,我恐怕一周学习一个linux命令我都做不到,想想我还是N天学习一个linux命令吧,从现在开始算起. 用途 显示命令帮助文档以及用法 用法 man [options] [section] cmd 命令文档部分说明 The table below shows the sect

一个简易的ATM机实现

这是我们C语言学习的最后阶段,用C语言做一个控制台控制的简易ATM机.实现输入密码,密码判断,显示选线等功能.我实现的代码如下: #include<stdio.h> #include<string.h> //#include<stdlib.h> void welcome(char user[]) { printf(" ################################################# \n"); printf(&quo

JAVA学习之Ecplise IDE 使用技巧(2)第二章:键盘小快手,代码辅助

上一篇:JAVA学习之Ecplise IDE 使用技巧(1)第一章:我的地盘我做主,工作空间 第二章:键盘小快手,代码辅助 内容包括: 第一:显示行号 如何设置行号:Ecplice菜单Windows>Preferences>General>Editors>Text Editors>勾掉Show Line Numbers 第二:打造更强大的代码提示 一般.笨的方法是:输入几个字母后按住Alt+/ 如何设置自动提示: 默认配置是: Ecplice菜单Windows>Pref

菜鸡程序猿的开始:java基础知识之一个简单ATM机

import java.util.Scanner; public class Atm{ static int allmoney=150000; //ATM现有余额 static int all=200000; // ATM最大量 static int money =10000; // 初始化用户的余额 public static void main(String[] args) { System.out.print("*********************************"

前端的小玩意(9.4)——做一个仿360工具箱的web页面(自动生成所有图标,对图标添加响应逻辑)

前端的小玩意(9.1)--做一个仿360工具箱的web页面(Tab按钮切换) http://blog.csdn.net/qq20004604/article/details/52216203 前端的小玩意(9.2)--做一个仿360工具箱的web页面(全部工具里面的模板) http://blog.csdn.net/qq20004604/article/details/52226223 前端的小玩意(9.3)--做一个仿360工具箱的web页面(我的工具里的模板和样式) http://blog.c

JAVA - ATM机程序

ATM机程序 UnionPayTest.java package oo.day06.work; public class UnionPayTest { } interface UnionPay{ //银联接口 public double getBalance(); //查询余额 public boolean drawMoney(double number); //取款 public boolean checkPwd(String input); //检查密码 } interface ABC ex