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 :

Problème gestion actionListener pour JButton


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 9
    Points : 11
    Points
    11
    Par défaut Problème gestion actionListener pour JButton
    Bonjour,
    je rencontre un problème dans la gestion des évènements sur un bouton.
    Dans une JDialog, j'ai une combo box et un bouton. Je souhaite que l'utilisateur choisisse ce qu'il souhaite dans mon menu déroulant et clique sur le bouton quand il a sélectionné ce qu'il souhaite. Pour chacun des fichiers d'un répertoire choisi, l'utilisateur devra choisir une option dans ma liste déroulante.
    Je dois effectuer ceci dans une boucle, pour tous les fichiers que j'ai précédemment listé et inséré dans mon ArrayList.

    Je rencontre donc le problème suivant : l'application n'attend pas que l'utilisateur clique sur le bouton, car l'affichage de la JDialog et le traitement de l'action du bouton se trouvent dans la boucle sur l'ensemble de ma liste de fichiers. Le résultat obtenu est que la boite de dialogue s'affiche et le choix prix en compte est le premier élément affiché par la combo box... La boucle continue et recommence, ne laissant pas à l'utilisateur le temps de cliquer...

    Mon code synthétisé ressemble en gros à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int i=0;
    List list = new ArrayList();
    while( j < list.size() ) {<div style="margin-left:40px">afficheDialog(); // affiche tous mes composants 
    bouton.addActionListener(new ActionListener() {<div style="margin-left:40px">public void actionPerformed(ActionEvent e) {</div><div style="margin-left:40px"><div style="margin-left:40px">/* Je souhaite ajouter le choix fait dans la  combo box à une autre ArrayList.
    */
    autreListe.add(ma_combobox.getSelectedItem());</div>}</div>});
    j++;</div>}
    J'ai testé en ajoutant une boucle while(valid) {} , qui attendait que valid passe à vrai dans la boucle while, ce qui était dans l'action du bouton, afin de stopper l'exécution de la boucle le temps que l'utilisateur clique sur le bouton, mais à ce moment là, la boucle infinie bloque l'affichage des composants dans la JDialog, et je ne peux donc pas cliquer sur le bouton indiquant que le choix a été fait, puisque le bouton n'apparait pas.

    Si vous avez des conseils à me donner...
    Cordialement,
    Cedr.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Janvier 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 32
    Points : 34
    Points
    34
    Par défaut
    Est ce que tu peux expliquer ce que tu veux faire ? ( et non comment tu veux le faire ) Il y aura peut etre une solution efficace a ton probleme.

    En substance si j'ai bien compris tu souhaiterais que l'affichage de la JDialog bloque la boucle ?

    Je ne sais pas si cela pourras t'aider mais sur ce lien :
    http://prevert.upmf-grenoble.fr/Prog/Java/dialogue.htm


    Il est explique qu'un JDialog peut etre modal ou non modal.

    J'ai teste avec un JOptionPane ( qui est un JDialog modal ) et cela a fonctionne comme tu le souhaite.

    voici le code :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    /*
     * TestJOptionPane.java
     *
     * Created on 26 mai 2006, 16:08
     */
    
    package test.dialog;
    
    import javax.swing.JOptionPane;
    
    /**
     *
     * @author peipei
     */
    public class TestJOptionPane{
        
        /** Creates a new instance of TestJOptionPane */
        public TestJOptionPane() {
            int i = 0;
            while(true){
                System.out.println(++i);
                int retour = JOptionPane.showConfirmDialog(null,"le message","le titre", JOptionPane.YES_NO_OPTION);            
            }
            
            
        }
        public static void main(String [] argv){
            new TestJOptionPane();
        }
        
    }
    

  3. #3
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    pourrais tu mettre tout ton code car la sa reste assez confu.
    tu declares une variable i = 0 que tu n'utilises pas dans cette portion de code mais "j"

    tu declare une arraylist que tu utilises directement dans une boucle for comme limite de celle-ci via sa taille sans avoir mi d'objet dedans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    while( j < list.size() ) {<div style="margin-left:40px">afficheDialog(); // affiche tous mes composants 
     
    bouton.addActionListener(new ActionListener() {<div style="margin-left:40px">public void actionPerformed(ActionEvent e) {
    </div><div style="margin-left:40px"><div style="margin-left:40px">/* Je souhaite ajouter le choix fait dans la  combo box à une autre ArrayList.
    */
    autreListe.add(ma_combobox.getSelectedItem());
    </div>}
    </div>});
    j++;
    }
    </div>

    si tu as 10 elements tu vas afficher 10 fois touts tes composants?
    et tu cree 10 fois ton actionListener et tu n'en a besoin qu'une et une seule fois vu que tu n'as qu'un bouton.
    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
    public TaClasse implements ActionListener{
     
    contructionInterface
    {
    
    String toto[]={"un","deux","trois"};
    jComboBox combo = new JComboBox(toto); Jbutton valider = new JButton("valider"); valider.addActionListerner(this); tonConteneur.add(combo); tonConteneur.add(valider); } public void actionPerformd(Event e) { if(e.getSource()==valider) { //on recupere l'element selectionner du Jcombobox String choix = combo.getSelectedItem()); // ton action a realiser } }



Discussions similaires

  1. Problème de header pour la gestion du cache
    Par Nico02 dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 16/10/2014, 18h36
  2. Problème ActionListener pour ouvrir une seconde fenêtre
    Par jesuislibre15 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 15/04/2012, 02h02
  3. [AC-2010] Problème de répétition pour base de données Gestion de Budget
    Par mcwk38 dans le forum Modélisation
    Réponses: 2
    Dernier message: 19/12/2011, 00h44
  4. Problème unit CRT pour Faire du Pascal avec Delphi
    Par alexmorel dans le forum Débuter
    Réponses: 4
    Dernier message: 01/06/2004, 17h13
  5. Réponses: 5
    Dernier message: 27/08/2003, 11h45

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