Отключение команды ОК в диалоге кодового имени - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть диалоговое окно с 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)?
  • Будет, например, использование кнопок вместо команд будет лучше?

1 Ответ

0 голосов
/ 19 ноября 2018

Мы не поддерживаем включение команды без ее повторной установки, поскольку нет никакой привязки между командой и компонентом, к которому она добавлена.Для реализации этой кнопки необходимо добавить прослушиватель к Command и отслеживать изменения во включенном флаге.Это может привести к утечке памяти, поскольку команды могут быть сохранены, а пользовательский интерфейс часто отбрасывается.

Мы не поддерживаем включение / отключение OK / Отмена в стандартном диалоговом окне.Вам нужно будет создать собственный экземпляр Dialog и самостоятельно управлять кнопками внутри него.

...