У меня есть диалоговое окно с PIN-кодом, как показано ниже, и я хочу включить кнопку «ОК» только в том случае, если введенный PIN-код содержит не менее пяти символов. В Android он работает, но в симуляторе он не работает, так как кнопка, кажется, остается отключенной; Моего слушателя казнили, но ok.setEnabled
, похоже, вообще ничего не делает.
public static String askPin() {
final String text = "Your PIN for ...";
final Label label = new Label(text);
final TextComponent pin = new TextComponent("PIN");
// is this safe?
((TextArea) pin.getEditor()).setConstraint(TextArea.PASSWORD);
final Command ok = new Command("OK");
final Command cancel = new Command("Cancel");
ok.setEnabled(false);
pin.getEditor().onChange((x, y) -> {
ok.setEnabled(pin.getText().length() >= 5);
pin.getComponentForm().revalidate();
});
final boolean cont = Dialog.show("Your PIN",
BoxLayout.encloseY(pin, label), ok, cancel) == ok;
return cont? pin.getText() : "";
}
Это ошибка или я все делаю неправильно?
Дополнительные вопросы:
- Будет ли приведение к
TextArea
работать на всех платформах (в симуляторе и на Android)?
- Будет, например, использование кнопок вместо команд будет лучше?