先上个效果图
接下来代码
JPasswordField pwd = new JPasswordField();
pwd.setEchoChar('*');
//添加显示密码图标按钮
JButton viewBtn = new JButton(new ImageIcon(Objects.requireNonNull(this.getClass().getClassLoader().getResource("view.png"))));
//添加隐藏密码图标按钮
JButton viewHideBtn = new JButton(new ImageIcon(Objects.requireNonNull(this.getClass().getClassLoader().getResource("view_hide.png"))));
//将图标按钮添加进密码框里面,需要使用FlatLightLaf主题库
//导入依赖后在所有swing组件的最前面(或者在方法一开始)添加 FlatLightLaf.setup(); 即可,maven地址放最下面了
//如果不需要将按钮添加进框里则无需使用FlatLightLaf,添加相应按钮到面板相应位置即可
pwd.putClientProperty("JTextField.trailingComponent", viewBtn);
//给显示密码图标绑定单击事件
viewBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
pwd.putClientProperty("JTextField.trailingComponent", viewHideBtn);//设置隐藏按钮显示,未使用FlatLightLaf则不需要
pwd.setEchoChar((char) 0);//设置密码显示
}
});
//给隐藏密码图标绑定单击事件
viewHideBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
pwd.putClientProperty("JTextField.trailingComponent", viewBtn);//设置显示按钮显示,未使用FlatLightLaf则不需要
pwd.setEchoChar('*');//设置密码隐藏
}
});
//注:FlatLightLaf maven地址
<dependency>
<groupId>com.formdev</groupId>
<artifactId>flatlaf</artifactId>
<version>2.4</version>
</dependency>
说明一下,如果没有使用 FlatLightLaf,则在点击按钮后设置另外一个按钮显示或隐藏即可
调用方法
btn.setVisible(false);
可隐藏按钮