我有如下所示的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上都可以)?答案 0 :(得分:0)
我们不支持在不重新设置命令的情况下启用该命令,因为命令与其添加的组件之间没有绑定。为了实现此功能,该按钮将需要向Command
添加一个侦听器并监视对enabled标志的更改。由于可以在经常丢弃UI的情况下存储命令,因此会造成内存泄漏。
我们不支持在标准对话框中启用/禁用确定/取消。您将需要创建自己的Dialog
实例并自己控制其中的按钮。