Java ME中的是/否对话框

时间:2008-09-11 15:43:04

标签: java user-interface java-me midlet

我正在寻找一个简单的解决方案,用于在Java ME midlet中使用yes / no对话框。我想像这样使用它,但其他方式也很好。

if (YesNoDialog.ask("Are you sure?") == true) {
  // yes was chosen
} else {
  // no was chosen
}

2 个答案:

答案 0 :(得分:7)

您需要Alert

  

警报是一个屏幕,向用户显示数据并等待一段时间后再继续显示下一个Displayable。警报可以包含文本字符串和图像。 Alert的预期用途是告知用户有关错误和其他异常情况的信息。

使用2 commands(在您的情况下为“是”/“否”):

  

如果警报中存在两个或多个命令,它将自动转换为模态警报,并且超时值始终为FOREVER。警报将保留在显示屏上,直到调用命令为止。

这些是MIDP 1.0及更高版本支持的内置类。您的代码段也永远不会有效。这样的API需要阻止等待用户选择和回答的调用线程。这恰好与MIDP的UI交互模型的方向相反,MIDP基于回调和委托。您需要提供自己的类,实现CommandListener,并为异步执行准备代码。

这是一个基于Alert的(未经测试的!)示例类:

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调用。

答案 1 :(得分:-2)

我没有在Java ME中编程,但我在其中找到了可选包的参考资料 Advanced Graphics and User Interface API,它像Java SE API一样用于使用JOptionPane Class

创建这些对话框
  

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 ......