Как отключить IME в поле пароля javafx

На веб-странице можно установить пароль для отключения Microsoft IME, чтобы пользователи не могли вводить символы других языков. например, китайские или японские иероглифы не могут быть введены в это поле.

но в пользовательском интерфейсе javafx мне легко поместить китайский символ в поле пароля. кто знает, как отключить Microsoft IME, когда я ввожу символы в поле пароля? Я просто хочу ввести только число, знаки и английские символы в поле пароля.


person S.Lee    schedule 24.11.2017    source источник
comment
использование паролей, содержащих нелатинские символы, повышает безопасность.   -  person mr mcwolf    schedule 24.11.2017


Ответы (1)


Если вы действительно хотите ограничить диапазон символов, которые можно использовать для пароля, вы можете проверить это:

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;
}));
person mr mcwolf    schedule 24.11.2017
comment
это не идеальное решение. на веб-странице, если вы измените метод ввода на китайский, при нажатии клавиши также будет вводиться пароль. похоже, вы не изменили метод ввода на китайский. но если вы используете этот код в качестве фильтра, вы не сможете ничего вводить, если ваш метод ввода китайский. - person S.Lee; 25.11.2017
comment
Для этого требуется отдельный буфер захвата KeyEvents. В теории это выглядит просто, но на самом деле подводных камней очень много — состояние Caps Lock, положение курсора… - person mr mcwolf; 25.11.2017