我正在寻找一个简单的解决方案,用于在 Java ME midlet 中使用是/否对话框。我想像这样使用它,但其他方式也可以。
if (YesNoDialog.ask("Are you sure?") == true) {
// yes was chosen
} else {
// no was chosen
}
我正在寻找一个简单的解决方案,用于在 Java ME midlet 中使用是/否对话框。我想像这样使用它,但其他方式也可以。
if (YesNoDialog.ask("Are you sure?") == true) {
// yes was chosen
} else {
// no was chosen
}
你需要一个警报:
警报是向用户显示数据并在继续下一个 Displayable 之前等待一段时间的屏幕。警报可以包含文本字符串和图像。警报的预期用途是通知用户错误和其他异常情况。
使用 2 个命令(在您的情况下为“是”/“否”):
如果 Alert 上有两个或多个 Commands,它会自动变为模态 Alert,并且超时值始终为 FOREVER。在调用命令之前,警报会一直显示在显示屏上。
这些是 MIDP 1.0 和更高版本支持的内置类。此外,您的代码片段将永远无法工作。这样的 API 需要阻塞等待用户选择和回答的调用线程。这与基于回调和委托的 MIDP 的 UI 交互模型完全相反。您需要提供自己的类,实现CommandListener并为异步执行准备代码。
这是一个(未经测试!)基于警报的示例类:
public class MyPrompter implements CommandListener {
private Alert yesNoAlert;
private Command softKey1;
private Command softKey2;
private boolean status;
public MyPrompter() {
yesNoAlert = new Alert("Attention");
yesNoAlert.setString("Are you sure?");
softKey1 = new Command("No", Command.BACK, 1);
softKey2 = new Command("Yes", Command.OK, 1);
yesNoAlert.addCommand(softKey1);
yesNoAlert.addCommand(softKey2);
yesNoAlert.setCommandListener(this);
status = false;
}
public Displayable getDisplayable() {
return yesNoAlert;
}
public boolean getStatus() {
return status;
}
public void commandAction(Command c, Displayable d) {
status = c.getCommandType() == Command.OK;
// maybe do other stuff here. remember this is asynchronous
}
};
要使用它(再次,未经测试并且在我的头顶上):
MyPrompter prompt = new MyPrompter();
Display.getDisplay(YOUR_MIDLET_INSTANCE).setCurrent(prompt.getDisplayable());
此代码将使提示成为您应用程序中当前显示的表单,但不会像您发布的示例中那样阻塞您的线程。您需要继续运行并等待 commandAction 调用。
我没有在 Java ME 中编程,但我在它的可选包参考中找到了 Advanced Graphics and User Interface API,它像 Java SE API 一样使用JOptionPane 类创建这些对话框
int JOptionPane.showConfirmDialog(java.awt.Component parentComponent, java.lang.Object >message, java.lang.String title, int optionType)
返回可能是
JOptionPane.YES_OPTION
, JOptionPane.NO_OPTION
, JOptionPane.CANCEL_OPTION
...