浅析Java匿名内部类创建登录界面

2020-12-28 11:53张丹丹
电脑知识与技术 2020年31期
关键词:输入框字符串本例

张丹丹

摘要:在使用Java Swing创建登录窗口的时候,涉及账户和密码框的设置,本例讨论使用JPasswordField()设置密码框,然后采用事件监听机制设置账户和密码的登录方式,在此过程中,使用匿名内部类创建监听接口對象,并重写其中的方法,判断账号和密码是否正确。本例还对登录框的背景图进行设置,使用Jpanel作为容器,将图片地址通过Toolkit.getDefaultToolkit().getImage提取,并重写该类绘图方法将图片载入,并且通过主类在背景图片上添加登录组件,如账号输入框和密码输入框等,实现登录框的制作。

关键词:JPasswordField();Toolkit.getDefaultToolkit().getImage;paintComponent(Graphics g);ActionListener()

中图分类号:TP311        文献标识码:A

文章编号:1009-3044(2020)31-0100-02

1 重写paintComponent方法创建背景

首先创建背景图,这里单独创建一个类,因为考虑将图片载入JPanel,然后重写其中的paintComponent(),因此本例取名panel类。在网上下载背景图片,本例格式为jpg,将其放入D盘根目录下,并将其路径保存至Sring对象中,如String url="D:\\bj.jpg",在该类构造函数中,通过上述保存的图片链接获取图片,具体使用Toolkit.getDefaultToolkit().getImage(url)来实现,因为Toolkit是抽象类,它调用了静态函数getDefaultToolkit()返回一个实例,然后再调用getImage(url)来获取图片。获取图片后,就可以重写paintComponent()实现载入背景图,该方法的参数为Graphics类,该类即为几何图形的绘制类,如绘制矩形、圆形、三角形等;在重写过程中可以先调用父类的绘制组件方法进行一次背景色的重绘,在这里可以免去本句函数(super.paintComponent(g)),因为下面将重写该方法,关键使用g.drawImage(img, x, y, observer)载入图片,从上述调用可以看出该方法属于Graphics类,它包含六个构造函数,本例中使用g.drawImage(img, x, y, observer),x 和y代表图片左上角的坐标轴,observer为绘制的容器,此例可以为null或this。

2 使用内部类添加登录框

2.1界面设置

登录框为主类,此例为基于JFrame类的对话框,取名keytest类。在该类构造函数中,首先将该主框架类设置为容器,然后创建上述panel类的实例对象,注意,刚刚创建的容器为顶层容器,在这个顶层容器中将panel类的实例添加进去;同时第一大段论述panel类是基于JPanel类的,因为Jpanel面板继承了java.awt.Container类,因此它本身属于容器,它被顶级容器添加后就成为二级容器,然后再使用二级容器(即panel类实例)去添加密码框等组件,如果直接使用顶层容器去添加组件,就无法产生图片背景。在panel面板添加组件时,使用了绝对布局,代码为bg.setLayout(null),之后在添加过程中可以使用setBounds(x, y, width, height)设置每个组件的具体位置。登录界面设有账户输入框和密码输入框,账户输入框使用new JTextField()产生一个实例zh,密码输入框使用new JPasswordField()产生实例,密码框与文本框的定义和使用方法类似,但是密码框输入字符可以使用回显字符,可以起到加密作用,也就是隐藏密码的显示或者说以其他字符代替密码的显示,可以使用password.setEchoChar('*')来显示回显字符,本例使用“*”号。本段代码如图1:

2.2登录按钮设置

开始创建登录按钮。先考虑我们在点击按钮,或点击下拉菜单时,即是这类组件调用了相应的动作方法,这些方法如:addActionListener(),removeActionListener(),而这些方法的参数即是各类事件对象,这些事件对象所属的类必须实现特定的接口,同时要实现接口中的方法,监听接口如:ActionListener。通常情况下,可以先通过组件对象调用监听器的方法,然后再创建一个继承监听接口的内部类,接着根据实际要求重写内部类中的方法。此例中,我们创建了匿名内部类,即将监听接口对象作为参数传给监听器的方法,代码如:button.addActionListener(new ActionListener(){})。接着重写该接口的public void actionPerformed(ActionEvent e),注意方法的参数为ActionEvent e,即动作事件类对象,方法体中,思路为先提取账户框和密码框中的文本,提取账户文本框中文本使用getText()即可,提取的类型为字符串;提取密码框中文本,如使用getText(),eclipse会在该代码上划横线,实际提示安全性问题,因为getText()提取的是字符串,而字符串所申请的内存区域是固定不变的,一旦创建不能改变,因为java字符串常量池等原因,会导致密码泄露,这个方法在查询API时,也提示已过期;使用getPassword():char[],顾名思义,处理的是密码文本域,可以看出,返回的是char数组,也正因为如此,它的equals方法采用的是比较运算符==,而==是比较的地址,因此安全性更高。因为需要账号和密码都要正确,因此,需定义两个字符串对象,将账号和密码的获取值分别传给这两个字符串,在此需要注意,上面论述中提到getPassword():char[]返回的是char[]数组,因此使用静态函数String.valueOf(char[] data)将其转换成字符串,同时还有Integer.valueof(),valueof()也就是转换并返回需要的数据类型。最后,使用if()来判断输入的账户和密码是否均正确,使用逻辑与&&来链接两个判断,如:if(z.equals("czfy")&&key.equals("hello")),最后让登录成功框弹出,即建立该对话框类对象并设置可见,如:ok j=new ok();j.setVisible(true)。该段主要代码见图2,登录界面见图3:

参考文献:

[1] 陈猛.基于Java的购物网站设计与开发[J].农家参谋,2020(8):200.

[2] 陈益全.基于创新型人才培养模式的《Java Web开发》教学设计[J].湖北开放职业学院学报,2020,33(4):5-7.

[3] 官亚芬.计算机软件开发中JAVA编程语言及其实际应用[J].中国新通信,2020,22(4):98-99.

[4] 杨伟凡.基于Java技术平台的在线考试系统的设计与实现[J].卫星电视与宽带多媒体,2020(3):99-100.

[5] 张振超,吴杰,陈序蓬.浅谈Java中Mysql数据库的连接与操作[J].信息记录材料,2020,21(2):144-145.

[6] 蒋玉婷.基于JAVA的教育教学综合平台设计与实现[J].教育现代化,2018,5(47):214-215.

[7] 陈磊,朱接文,张新萍.基于Java Web课程的启发教学研究[J].湖南邮电职业技术学院学报,2018,17(4):129-132.

[8] 王蕴森.Java技术在图像处理中的应用[J].中国新通信,2018,20(23):118.

【通联编辑:王力】

猜你喜欢
输入框字符串本例
《思考心电图之176》答案
拍一拍,图片识文字
“1”的加减乘除
输入框设计中需注意的9个细节
视功能分析图例详解
一种新的基于对称性的字符串相似性处理算法
依据字符串匹配的中文分词模型研究
一种针对Java中字符串的内存管理方案