JavaSwing之--JPasswordField
Java Swing之–JPasswordField应用详解
JPasswordField是一个轻量级组件,允许编辑单行文本,不会显示键入的原始字符,而是显示替代文本或图形。
JPasswordField的直接父类是JTextField,它继承了父类中的常用构造方法与普通方法。
关于JTextField组件已有详细介绍,故在讲解密码框时仅介绍有关密码输入、获取等紧密相关内容。
一、构造方法
方法名称 | 功能描述 |
---|---|
JPasswordField() | 构造一个新的 JPasswordField ,具有默认文档、null 起始文本字符串和 0 列宽。 |
JPasswordField(int columns) | 构造一个具有指定列数的新空 JPasswordField 。 |
JPasswordField(String text) | 构造一个用指定文本初始化的新 JPasswordField 。 |
JPasswordField(String text, int columns) | 构造一个用指定文本和列初始化的新 JPasswordField 。 |
JPasswordField(Document doc, String txt, int columns) | 构造一个新的 JPasswordField ,它使用给定的文本存储模型和给定的列数。 |
JPasswordFiled构造方法在形式上与JTextField相似,用法相似,不再赘述。
二、一般方法
在继承JTextField一般方法基础上,JPasswordField封装了自由的一般方法用于实现对密码内容的各类操作。
方法名称 | 功能描述 |
---|---|
char[] getPassword() | 返回此 TextComponent 中包含的文本,返回类型是字符数组 |
char getEchoChar() | 返回用于表示密码的字符。 |
void setEchoChar(char c) | 为此 JPasswordField 设置表示密码的字符。 |
void setText(String t) | 设置密码框的内容 |
三、用法详解
用法讲解与代码实现均已创建的JPasswordField对象为例。
JPasswordField jPasswordField = new JPasswordField();
- 设置密码框回显字符。调用方法 setEchorChar(char c),以给定的字符c作为回显字符在密码框中显示,表示密码。
jPasswordField.setEchoChar('#');//输入密码时文本框中显示#
- 获取密码。调用getPassword()方法,返回密码形成的字符数组,如有必要可转化需要的数据类型。
// 将密码字段的字符数组转换为字符串
String str = String.valueOf(jPasswordField.getPassword());
// 在对话框中显示密码信息
JOptionPane.showMessageDialog(null,str);
- 获取回显字符。调用方法getEchoChar()获得用以表示密码的字符
char echo = jPasswordField.getEchoChar();//字符为:#
四、拓展
在使用密码框构建界面时,有时需要明码显示密码,以确定是否输入正确,可以参照以下样式构建。
以上界面设计的逻辑为:
①创建一个JPanel面板对象
②在面板容器中添加一个JPasswordField对象
③在面板容器中再添加一个JLabel,用以放置眼睛图标
当需要明码显示输入密码时,值需要单价眼睛图标,在密码显示密码同时,眼睛图标从关闭状态转化为打开状态。在技术实现上,为JLabel对象注册鼠标事件监听,单击图标标签时通过调用setEchoChar()方法和setImage()方法改变显示状态,如下代码所示。
//创建一个全局的逻辑标记,表示密码框是否明码显示,默认显示符号。根据程序需要确定修饰符及作用域。private static boolean isshow = false;//默认false//创建一个JPanel对象作为放置密码框和眼睛图标标签的容器
JPanel jPanel = new JPanel();
jPanel.setLayout(null);
jPanel.setBounds(100,120,300,50);// 创建一个密码输入框
JPasswordField jPasswordField = new JPasswordField();
// 设置密码输入框的位置和大小
jPasswordField.setBounds(0,10,265,30);
// 移除密码输入框的边框
jPasswordField.setBorder(BorderFactory.createEmptyBorder());
// 将密码输入框添加到面板上
jPanel.add(jPasswordField);// 创建一个标签,用于显示眼睛图标
JLabel jLabel = new JLabel();
// 设置标签的位置和大小
jLabel.setBounds(270,10,30,30);// 加载并设置闭眼图标,初始默认是关闭状态
ImageIcon icon1 = new ImageIcon("image/eyeclose.png");
icon1.setImage(icon1.getImage().getScaledInstance(30,30,Image.SCALE_SMOOTH));
jLabel.setIcon(icon1);// 创建一个睁开的眼睛图标
ImageIcon icon2= new ImageIcon("image/eye.png");
icon2.setImage(icon2.getImage().getScaledInstance(30,30,Image.SCALE_SMOOTH));// 将标签添加到面板上
jPanel.add(jLabel);// 为标签添加鼠标事件监听器
jLabel.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {// 切换密码显示状态isshow = !isshow;// 根据显示状态设置密码输入框的回显字符jPasswordField.setEchoChar(isshow?(char)0:'*');// 根据显示状态更新眼睛图标jLabel.setIcon(isshow?icon2:icon1);}
});
基于以上技术实现逻辑,读者可根据喜好自定义组件满足程序功能需求。
五、总结
JPasswordField密码框能与其他组件组合形成定制化的密码输入组件,提升程序友好性。更多更强用法,请读者参考官方说明文档。