在代号对话框中禁用OK命令

时间:2018-11-18 13:05:24

标签: java modal-dialog codenameone

我有如下所示的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 :(得分:0)

我们不支持在不重新设置命令的情况下启用该命令,因为命令与其添加的组件之间没有绑定。为了实现此功能,该按钮将需要向Command添加一个侦听器并监视对enabled标志的更改。由于可以在经常丢弃UI的情况下存储命令,因此会造成内存泄漏。

我们不支持在标准对话框中启用/禁用确定/取消。您将需要创建自己的Dialog实例并自己控制其中的按钮。