Caixa de diálogo Sim/Não em Java ME
-
09-06-2019 - |
Pergunta
Estou procurando uma solução simples para uma caixa de diálogo sim/não para usar em um midlet Java ME.Eu gostaria de usá-lo assim, mas outras maneiras são aceitáveis.
if (YesNoDialog.ask("Are you sure?") == true) {
// yes was chosen
} else {
// no was chosen
}
Solução
Você precisa de um Alerta:
Um alerta é uma tela que mostra dados ao usuário e aguarda um determinado período de tempo antes de prosseguir para o próximo Displayable.Um alerta pode conter uma sequência de texto e uma imagem.O uso pretendido do Alert é informar o usuário sobre erros e outras condições excepcionais.
Com 2 comandos ("Sim"/"Não" no seu caso):
Caso existam dois ou mais Comandos presentes no Alerta, ele é automaticamente transformado em Alerta modal, e o valor do timeout é sempre FOREVER.O Alerta permanece no display até que um Comando seja invocado.
Estas são classes integradas com suporte no MIDP 1.0 e superior.Além disso, seu trecho de código nunca funcionará.Essa API precisaria bloquear o thread de chamada aguardando a seleção e resposta do usuário.Isso vai exatamente na direção oposta do modelo de interação UI do MIDP, que é baseado em retornos de chamada e delegação.Você precisa fornecer sua própria classe, implementando CommandListener, e prepare seu código para execução assíncrona.
Aqui está um exemplo de classe (não testado!) Baseado em 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
}
};
Para usá-lo (novamente, não testado e em cima da minha cabeça):
MyPrompter prompt = new MyPrompter();
Display.getDisplay(YOUR_MIDLET_INSTANCE).setCurrent(prompt.getDisplayable());
Este código tornará o prompt o formulário exibido atualmente em seu aplicativo, mas não bloqueará seu tópico como no exemplo que você postou.Você precisa continuar executando e aguardar uma invocação de commandAction.
Outras dicas
Não programei em Java ME, mas encontrei em sua referência para pacotes opcionais oAPI avançada de gráficos e interface de usuário, e é usado como a API Java SE para criar esses diálogos com o Classe JOptionPane
int JOptionPane.showConfirmDialog (java.awt.Component parentComponent, java.lang.Object > mensagem, java.lang.String título, int optionType)
O retorno pode ser joptionpane.yes_option, joptionpane.no_option, joptionpane.cancel_option ...