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
}
Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top