使用亚洲语言(韩语,日语,中文)在Java swing(JPasswordField)中设置密码不起作用

问题描述:

我尝试使用亚洲复合字符的JPasswordField组件的不一致行为有问题。使用亚洲语言(韩语,日语,中文)在Java swing(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中一些其他的组成部分,但适合我的需要?

您是否知道此链接? JPasswordField (Java Platform SE 8)

注意:默认情况下,JPasswordField禁用输入法;否则,使用输入法编写输入字符时可以看到输入字符。如果应用程序需要输入方法支持,请使用继承的方法enableInputMethods(true)。

+0

是的,它看起来很有效。我已经看到,但没有测试它,有一句话“默认情况下,输入法支持已启用。”在上下文帮助。但是文本可能是从java.awt.Component继承而来 - 谢谢!我会重新测试它,然后接受答案。 – Metatron 2015-03-03 11:21:48