Диалоговое окно «Да/Нет» в Java ME
-
09-06-2019 - |
Вопрос
Я ищу простое решение для диалогового окна «да/нет» для использования в мидлете Java ME.Я бы хотел использовать его вот так, но можно использовать и другие способы.
if (YesNoDialog.ask("Are you sure?") == true) {
// yes was chosen
} else {
// no was chosen
}
Решение
Вам нужен Тревога:
Оповещение — это экран, который показывает данные пользователю и ожидает определенного периода времени, прежде чем перейти к следующему отображаемому объекту.Предупреждение может содержать текстовую строку и изображение.Предполагаемое использование Alert — информировать пользователя об ошибках и других исключительных ситуациях.
С 2 команды («Да»/«Нет» в вашем случае):
Если в оповещении присутствуют две или более команды, оно автоматически преобразуется в модальное оповещение, а значение тайм-аута всегда равно НАВСЕГДА.Предупреждение остается на дисплее до тех пор, пока не будет вызвана команда.
Это встроенные классы, поддерживаемые в MIDP 1.0 и выше.Кроме того, ваш фрагмент кода никогда не будет работать.Такой API должен будет блокировать вызывающий поток, ожидающий выбора и ответа пользователя.Это идет в прямо противоположном направлении от модели взаимодействия пользовательского интерфейса MIDP, которая основана на обратных вызовах и делегировании.Вам необходимо предоставить свой собственный класс, реализуя Слушатель команд, и подготовьте свой код для асинхронного выполнения.
Вот (непроверенный!) пример класса, основанного на 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.
Другие советы
Я не программировал на Java ME, но нашел в справочнике по дополнительным пакетамAPI расширенной графики и пользовательского интерфейса, и он используется как API Java SE для создания этих диалогов с помощью Класс JOptionPane
int JOptionPane.showConfirmDialog(java.awt.Component родительскийкомпонент, java.lang.Object > сообщение, java.lang.String title, int optionType)
Возврат может быть joptionpane.yes_option, joptionpane.no_option, joptionpane.cancel_option ...