天天看点

Swing 给密码框JPasswordField设置显示和隐藏密码功能

先上个效果图

Swing 给密码框JPasswordField设置显示和隐藏密码功能

 接下来代码

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);      

可隐藏按钮