IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Question sur JOptionPane.showInputDialog


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé Avatar de Blaede
    Profil pro
    Inscrit en
    Août 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 120
    Par défaut Question sur JOptionPane.showInputDialog
    Bonjour à tous,

    j'ai une petite question sur les listbox.
    J'ai une série d'objets de même type.
    Je voudrais que l'utilisateur puisse choisir l'un de ces objets
    et j'effectue ensuite un traitement en fonction du résultat de
    son choix.

    Jusqu'à présent je n'ai rien trouvé de mieux que créer une liste
    contenant le nom (de type String donc) de chaque objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    List maListe = new ArrayList<String>();
    		maListe.add("Choix1");
    		maListe.add("Choix2");
    		maListe.add("Choix3");
    		maListe.add("Choix4");
    de passer cette liste à ma listbox et de récupérer le résultat
    du choix (un String toujours forcément).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Iterator iter = maListe.iterator();
    		Object [] menu_options = new Object[maListe .size()];
    		int i=0;
    		while (iter.hasNext())
    			menu_options[i++] = iter.next();
     
    		String resultat = (String)JOptionPane.showInputDialog(
    	            null,
    	            "Choose one ?",
    	            "Question ",
    	            JOptionPane.QUESTION_MESSAGE,
    	            null,
    	            menu_options,
    	            menu_options[0]);
    Mais cela fait je dois encore faire une succession atroce de if...else...if
    pour trouver l'objet qui correspond à ce résultat de type String afin d'effectuer le traitement adéquat ! (le switch ne fonctionnant pas avec les
    String...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    if (resultat.equalsIgnoreCase("Choix1")) {
    			action1():
    			action2();
    		}
    		else if (resultat.equalsIgnoreCase("Choix2")) {
    			action1():
    			action2();
    		}
    		else if (resultat.equalsIgnoreCase("Choix3")) {
    			action1():
    			action2();
    		}
                   else {
                            action1();
                            action2();
                    }
    Il y a forcément moyen de faire plus simple, qqun aurait une idée ?

    Merci d'avance !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 136
    Par défaut
    Bonsoir,

    Tu devrais essayer en donnant comme argument un tableau de String à la place de ton tableau d'objets (menu_options).

    Du coup tu récupererais un string et tu n'aurais pas besoin de faire tous tes if.

    Cdlt

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    tu peux faire une interface choix que tu implémente de différente façons:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public interface Choix {
      public abstract void action();
    }
     
    public class Choix1 implements Choix {
      public void action() {
        // action du choix 1
      }
     
      public String toString() {
        return "Choix 1";
      }
    }
     
     
     
    public class Choix2 implements Choix {
      public void action() {
        // action du choix 2
      }
     
      public String toString() {
        return "Choix 2";
      }
    }
    Ensuite tu mets une instance de chaque choix dans ta liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    List<Choix> maListe = new ArrayList<Choix>();
    		maListe.add(new Choix1());
    		maListe.add(new Choix2());
    		maListe.add(new Choix3());
    		maListe.add(new Choix4());


    Tu mets le tout dans le JOptionPane :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Choix resultat = (Choix) JOptionPane.showInputDialog(
    	            null,
    	            "Choose one ?",
    	            "Question ",
    	            JOptionPane.QUESTION_MESSAGE,
    	            null,
    	            maListe.toArray(),
    	            maListe.get(0);
    Et enfin tu n'as plus qu'à exécuter le choix:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (resultat != null) {
      choix.action();
    }

  4. #4
    Membre confirmé Avatar de Blaede
    Profil pro
    Inscrit en
    Août 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 120
    Par défaut
    Piou1234 je récupère déjà un String comme résultat si tu regardes bien le code.

    Merci the-gtm ta réponse correspond exactement à ce que je cherchais à une petit exception près, j'ai oublié de préciser qqch de capital.

    Ce que je souhaite faire lorsque j'ai récupéré le choix de l'utilisateur, c'est :

    1. instancier l'objet qu'il a choisi
    2. appeler la méthode de cet objet

    Ta solution répond très bien à la deuxième action mais idéalement je ne devrais instancier les objets que lorsqu'ils ont été choisis par l'utilisateur...

    Vois-tu un moyen de régler ce problème ?

    Encore merci !

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Choix1 implements Choix {
      public void action() {
        ObjectAInstancier1 objet = new ObjectAInstancier1();
        objet.methodeAAppeler();
      }
     
      public String toString() {
        return "Choix 1";
      }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JOptionPane] Question sur l'affichage d'un MessageDialog
    Par Nanawel dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 04/05/2007, 00h06
  2. Question sur JOptionPane.showConfirmDialog()
    Par DevloNewb' dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 10/06/2006, 23h01
  3. [SWING] Question sur : JOptionPane.showMessageDialog
    Par Invité dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 14/12/2005, 12h15
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo