我在尝试使用亚洲复合字符时遇到 JPasswordField 组件的不一致行为问题。
我的代码是:
final JCheckBox visiblePassword = new JCheckBox(); // show/hide password checkbox
JPasswordField passwordField = new JPasswordField();
passwordField.setPreferredSize(new Dimension(200, 25));
final char echoChar = passwordField.getEchoChar();
visiblePassword.addActionListener(new ActionListener() // show/hide password
{
public void actionPerformed(ActionEvent evt)
{
if(visiblePassword.isSelected()) passwordField.setEchoChar((char)0);
else passwordField.setEchoChar(echoChar);
}
});
我的目标是允许输入密码中的所有字符。
然而:
Windows 8 - 它根本不起作用(只允许使用拉丁字符 - IME 不起作用)。
Mac OS X - 允许使用韩文字符(但它不会将它们连接到一个字符中),日文和中文根本不起作用。
我可以在这里为其他平台(如 iOS)找到此问题的讨论和解决方案:
使用 secureTextEntry 为 UITextField 选择键盘语言
但是对于 Java swing 没有任何帮助。
因此,在我开始实施“JPasswordField”的自定义版本之前,我想问一下:
有没有人解决这个问题,或者你知道像 JPasswordField 这样的其他组件,但适合我的需要吗?