Да / Нет диалоговое окно в Java ME - PullRequest
5 голосов
/ 11 сентября 2008

Я ищу простое решение для диалога да / нет для использования в мидлете Java ME. Я хотел бы использовать это так, но другие способы окей.

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

Ответы [ 2 ]

7 голосов
/ 15 сентября 2008

Вам нужно оповещение :

Предупреждение - это экран, который показывает данные пользователю и ожидает в течение определенного периода времени, прежде чем перейти к следующему отображению. Предупреждение может содержать текстовую строку и изображение. Предполагаемое использование Alert - информирование пользователя об ошибках и других исключительных условиях.

С помощью 2 команд («Да» / «Нет» в вашем случае):

Если в оповещении присутствуют две или более команд, оно автоматически превращается в модальное оповещение, а значение тайм-аута всегда НАВСЕГДА. Оповещение остается на дисплее до тех пор, пока не будет вызвана команда.

Это встроенные классы, поддерживаемые в MIDP 1.0 и выше. Также ваш фрагмент кода никогда не будет работать. Такой API должен был бы блокировать вызывающий поток, ожидающий выбора и ответа пользователя. Это идет точно в противоположном направлении модели взаимодействия пользовательского интерфейса 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.

0 голосов
/ 11 сентября 2008

Я не программировал в Java ME, но я нашел в справочнике для дополнительных пакетов Расширенный графический и пользовательский интерфейс API , и он используется как API Java SE для создания этих диалогов с JOptionPane Class

int JOptionPane.showConfirmDialog (java.awt.Component parentComponent, java.lang.Object> message, заголовок java.lang.String, int optionType)

Возврат может быть JOptionPane.YES_OPTION, JOptionPane.NO_OPTION, JOptionPane.CANCEL_OPTION ...

...