Question

Je recherche une solution simple pour une boîte de dialogue oui/non à utiliser dans un midlet Java ME.J'aimerais l'utiliser comme ça, mais d'autres méthodes sont acceptables.

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

La solution

Vous avez besoin d'un Alerte:

Une alerte est un écran qui affiche des données à l'utilisateur et attend un certain temps avant de passer au prochain affichage.Une alerte peut contenir une chaîne de texte et une image.L'utilisation prévue d'Alert est d'informer l'utilisateur des erreurs et autres conditions exceptionnelles.

Avec 2 commandes ("Oui"/"Non" dans votre cas) :

S'il y a deux commandes ou plus présentes sur l'alerte, elle est automatiquement transformée en alerte modale et la valeur du délai d'attente est toujours FOREVER.L'alerte reste affichée jusqu'à ce qu'une commande soit invoquée.

Il s'agit de classes intégrées prises en charge dans MIDP 1.0 et versions ultérieures.De plus, votre extrait de code ne fonctionnera jamais.Une telle API devrait bloquer le thread appelant en attendant que l'utilisateur sélectionne et réponde.Cela va exactement dans la direction opposée du modèle d'interaction UI de MIDP, qui est basé sur les rappels et la délégation.Vous devez fournir votre propre classe, en implémentant CommandListener, et préparez votre code pour une exécution asynchrone.

Voici un exemple de classe (non testé !) basé sur 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
    }

};

Pour l'utiliser (encore une fois, non testé et au-dessus de ma tête) :

MyPrompter prompt = new MyPrompter();
Display.getDisplay(YOUR_MIDLET_INSTANCE).setCurrent(prompt.getDisplayable());

Ce code fera de l'invite le formulaire actuellement affiché dans votre application, mais il ne bloquera pas votre fil de discussion comme dans l'exemple que vous avez posté.Vous devez continuer à exécuter et attendre une invocation commandAction.

Autres conseils

Je n'ai pas programmé en Java ME, mais j'ai trouvé dans sa référence pour les packages facultatifs leAPI avancée de graphiques et d'interface utilisateur, et il est utilisé comme l'API Java SE pour créer ces boîtes de dialogue avec le Classe JOptionPane

int JOptionPane.showConfirmDialog (java.awt.Component parentComponent, java.lang.Object >message, java.lang.String titre, int optionType)

Le retour pourrait être joptionpane.yes_option, joptionpane.no_option, joptionpane.cancel_option ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top