JPasswordField聚焦失焦事件

本文最后更新于:5 个月前

JPasswordField实现原理基本和JTextField相同,实际上JPasswordField是JTextField的子类,这里有有一点需要注意,当我们不需要明文是需要设置此setEchoChar(echo)方法.
注意:这里需要考虑初始化始根据需要进行第一次赋值处理
JPasswordField中setEchoChar(echo)方法实现 ↓↓

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/** 
* 设置此<code>JPasswordField</code>的回显字符。
* 请注意,这在很大程度上是一个建议,因为
* 安装的视图可以使用任何图形技术
* 它希望代表这个领域。设置值0表示
* 您希望在键入文本时看到文本,类似于
* 标准<code>JTextField</code>的行为。
*
* @param c要显示的回波字符
* @参见#echoCharIsSet
* @参见#getEchoChar
* @豆信息
* description:要显示的字符以代替真实字符
* 属性:visualUpdate true
*/
public void setEchoChar(char c) {
echoChar = c;
echoCharSet = true;
repaint();
revalidate();
}

代码实现如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 设置提醒文字
String emptyText = "等待输入...";
char echo = 0;
// new JTextField对象
JPasswordField jPasswordField = new JPasswordField();
// 赋值
jPasswordField.setText(emptyText);
// 设置等待输入文字颜色为浅灰色
jPasswordField.setForeground(Color.DARK_GRAY)
// 设置失焦聚焦事件
jPasswordField.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
//获得焦点,当获取text和emptyText相同时从新赋值并更换字体颜色设置为密文,不相同则不做任何处理
if (emptyText.equals(jPasswordField.getText())) {
jPasswordField.setText("");
jPasswordField.setForeground(Color.BLACK);
jPasswordField.setEchoChar('*')
}
}
@Override
public void focusLost(FocusEvent e) {
//失去焦点,输入框没有值时将emptyText从新赋回同时改变颜色,设置为明文
if (jPasswordField.getText().isEmpty() && !emptyText.isEmpty()) {
jPasswordField.setText(emptyText);
jPasswordField.setForeground(Color.DARK_GRAY);
jPasswordField.setEchoChar(echo)
}
}
});

颜色可以根据需要修改,通过失焦聚焦逻辑实现等待输入提示效果


JPasswordField聚焦失焦事件
https://crudclass.github.io/2023/04/11/Java/Swing/JPassword_1/
作者
Zero
发布于
星期二, 四月 11日 2023, 9:41 晚上
更新于
2023年4月11日
许可协议