有没有替代JPasswordField?
当input一个密码短语时
yeast bulk seize is shows pain
每个人都可以听到轻敲空格键,所以显示密码字段中的空格也是合乎逻辑的。 所以我想要能展示的东西
***** **** ***** ** ***** ****
代替
******************************
这将使打字更容易,而不会降低安全性。
UPDATE
在更新Riduidel的评论之前请三思。 当布鲁斯·施奈尔(Bruce Schneier)写道: “现在是时候以明文forms显示大多数密码了” ,然后显示一小部分密码也必须是正确的。 特别performance出可以简单地通过聆听捕捉的部分。
下面是一个使用setEchoChar()
使密码在预定义时间内可见的变体:例如三秒。
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JPasswordField; import javax.swing.Timer; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; /** @see http://stackoverflow.com/questions/5339702 */ public class PasswordTest { public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGui(); } }); } private static void createAndShowGui() { JFrame jf = new JFrame("Test Password"); JPasswordField jpwd = new JPasswordField(); TimedPasswordListener tpl = new TimedPasswordListener(jpwd); jpwd.getDocument().addDocumentListener(tpl); jf.add(jpwd); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setLocationRelativeTo(null); jf.pack(); jf.setVisible(true); } } class TimedPasswordListener implements DocumentListener, ActionListener { private Timer timer = new Timer(3000, this); private char echoChar; private JPasswordField pwf; public TimedPasswordListener(JPasswordField jp) { pwf = jp; timer.setRepeats(false); } public void insertUpdate(DocumentEvent e) { showText(e); } public void removeUpdate(DocumentEvent e) { showText(e); } public void changedUpdate(DocumentEvent e) {} public void showText(DocumentEvent e) { if (0 != pwf.getEchoChar()) { echoChar = pwf.getEchoChar(); } pwf.setEchoChar((char) 0); timer.restart(); } public void actionPerformed(ActionEvent e) { pwf.setEchoChar(echoChar); } }
想到JPasswordField
只是一个简单的覆盖渲染器组件的JTextField
,但似乎并非如此。
所以,不要改变渲染器(就像JTextField
有这样的组件),你必须使用一个带有自定义Document
的JTextField
,它包含两个string:
- 密码文本由用户写入
- 显示密码
您必须确保所有的Document
修改方法都会更改密码文本,而所有的渲染方法都使用显示的方法。