Domanda

Sto cercando una soluzione semplice per un sì/no finestra di dialogo per l'uso in una midlet Java ME.Mi piacerebbe usarlo come questo, ma altri modi sono okey.

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

Soluzione

Hai bisogno di un Avviso:

Un avviso è una schermata che mostra i dati dell'utente e attende per un certo periodo di tempo prima di procedere alla successiva Visualizzabile.Un avviso può contenere una stringa di testo e un'immagine.La destinazione d'uso di Avviso per informare l'utente su errori e altre condizioni eccezionali.

Con 2 comandi ("Sì"/"No" nel tuo caso):

Se ci sono due o più Comandi presenti sull'Avviso, è automaticamente trasformato in un Avviso a scelta obbligatoria, e il valore di timeout è sempre, per SEMPRE.L'Avviso rimane sul display fino a quando un Comando viene invocato.

Queste sono le classi supportato in MIDP 1.0 e superiori.Anche il frammento di codice non funzionerà mai.Tale API avrebbe bisogno di bloccare il thread chiamante in attesa per l'utente di selezionare e rispondere.Questo va esattamente nella direzione opposta della UI modello di interazione di MIDP, che è a base di callback e la delega.È necessario fornire la propria classe, in attuazione CommandListener, e preparare il vostro codice per l'esecuzione asincrona.

Qui è un' (testato!) esempio di classe basata sull'Avviso:

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
    }

};

Per l'uso (di nuovo, testato e sulla parte superiore della mia testa):

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

Questo codice farà il prompt corrente visualizzato in app, ma non bloccare il thread come nell'esempio che hai postato.È necessario continuare a correre e aspettare per un commandAction invocazione.

Altri suggerimenti

Non ho programmato in Java ME, ma ho trovato nel riferimento per i pacchetti opzionali il Grafica avanzata e l'Interfaccia Utente API, ed è utilizzato come Java SE API per la creazione di queste finestre di dialogo con il Classe JOptionPane

int JOptionPane.showConfirmDialog(java.awt.Componente parentComponent, java.lang.Oggetto >messaggio, java.lang.String titolo, int optionType)

Il ritorno potrebbe essere JOptionPane.YES_OPTION, JOptionPane.NO_OPTION, JOptionPane.CANCEL_OPTION ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top