如何在javafx密码字段中禁用IME

如何在javafx密码字段中禁用IME,javafx,passwords,ime,Javafx,Passwords,Ime,在网页中,可以将密码字段设置为禁用microsoft IME,以防止用户输入其他语言字符。例如,不能在该字段中输入中文或日文字符 但在JavaFXUI中,我很容易将汉字放入密码字段。当我在密码字段中输入字符时,谁知道如何禁用microsoft IME?我只想在密码字段中只输入数字、符号和英文字符。如果您确实想限制可用于密码的字符范围,您可以测试: Pattern pattern = Pattern.compile("[a-zA-Z0-9\\-\\+]*"); PasswordField pas

在网页中,可以将密码字段设置为禁用microsoft IME,以防止用户输入其他语言字符。例如,不能在该字段中输入中文或日文字符


但在JavaFXUI中,我很容易将汉字放入密码字段。当我在密码字段中输入字符时,谁知道如何禁用microsoft IME?我只想在密码字段中只输入数字、符号和英文字符。

如果您确实想限制可用于密码的字符范围,您可以测试:

Pattern pattern = Pattern.compile("[a-zA-Z0-9\\-\\+]*");

PasswordField passwordField = new PasswordField();
passwordField.setTextFormatter(new TextFormatter<String>(change -> {
    if(pattern.matcher(change.getText()).matches()) {
        return change;
    }

    return null;
}));

使用包含非拉丁字符的密码可以提高安全性。这不是一个完美的解决方案。在网页中,如果您将输入法更改为中文,当您按键时,也会输入密码。看起来你没有把输入法改成中文。但如果您将此代码用作筛选器,则当您的输入方法为中文时,您无法输入任何内容。这需要一个单独的KeyEvents捕获缓冲区。理论上,它看起来很简单,但实际上有很多水下石头-大写锁定的状态,光标的位置。。。