我遇到了尝试使用亚洲复合字符的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等其他平台上找到此问题的讨论和解决方案:
Selecting language of the keyboard for UITextField with secureTextEntry
然而,没有什么可以用于Java摇摆。所以在我开始实现“JPasswordField”的自定义版本之前,我想问一下:
有没有人解决这个问题,或者您是否知道其他一些组件,如JPasswordField,但适合我的需求?
答案 0 :(得分:2)
您知道这个链接吗? JPasswordField (Java Platform SE 8 )
注意:默认情况下,JPasswordField禁用输入方法;否则,输入字符在使用输入法编写时可能是可见的。如果应用程序需要输入方法支持,请使用继承的方法enableInputMethods(true)。