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

Composants Java Discussion :

[JList] Monter et descendre avec le clavier


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut [JList] Monter et descendre avec le clavier
    bonjour,

    je viens de me rendre compte que le probleme que j'ai depuis 10 jours ne venait pas de la partie de code que je pensais. Le probleme est ailleurs dans le code.

    Comment monter et descendre dans une JList en appuyant sur un bouton haut et un bouton bas?

    j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // pr monter dans la JList
     public void actionPerformed(ActionEvent e){
         int i = maJList.getMinSelectionIndex();
         maJList.setSelectedIndex(i-1); 
    }
     
    //pour descendre dans la JList, idem sauf que i+1
    a premiere vue, ça fonctionnait, ça monte et ça descend. mais après plusieurs tests, g vu que ça n'allait pas du tout.

    quelqu'un pourrait il m'aider?
    merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 30
    Par défaut
    je comprend pas le problème
    quand tu es sur une JList et que tu appuyes sur le bouton "bas" clavier tu descend de un élement dans la liste et tu montes de un élément en apuyant sur le bouton "haut".

    tu ne dois pas écrire d'évènement qui fait ca normalement

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 30
    Par défaut
    excuse moi,
    je pense que j'ai compris ce que tu veux dire quand tu parles d'un bouton. c'est pas un bouton du clavier mais un Jbutton ?

    une solution serait d'appeler alors l'action du bouton du clavier bas et haut.

    en faisant

    ActionMap map = jlist.getActionMap();

    ensuite, tu dois trouver la clé qui corresponde a la pression sur le clavier de la touche bas et haut (je ne connais pas cela de mémoire, mais tu peux les trouver en faisant un map.allKeys() par exemple).

    ensuite, sur ton bouton, tu peux faire un

    Action action = map.getAction(la clé que tu auras trouvé);
    button.setAction(action);

    normalement plus de soucis :-)

  4. #4
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    tout d'abord merci à toi d'avoir répondu aussi vite. et désolé, c moi qui me suis mal exprimé, je parlais bien d'un JButton

    je découvre que des nouveaux trucs ici (je précise, je débute en java...). j'avais jamais entendu parler de tout ce que tu as écrit.

    alors j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ActionMap map = jliste.getActionMap(); 
     
    //pour trouver le nom de la clé correspondant à touche haut et touche bas
    for(int i = 0; i < map.allKeys().length; i++) { 
       Object o = map.allKeys()[i]; 
       System.out.println(o);
    }
    voici ce que ça m'affiche:
    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
    34
     
    selectPreviousRowExtendSelection
    selectPreviousRowChangeLead
    addToSelection
    extendTo
    scrollDownChangeLead
    selectFirstRowExtendSelection
    scrollDownExtendSelection
    selectLastRow
    scrollUpChangeLead
    scrollUp
    moveSelectionTo
    selectLastRowChangeLead
    selectNextRowExtendSelection
    selectNextColumnChangeLead
    selectFirstRowChangeLead
    selectFirstRow
    selectPreviousColumnChangeLead
    selectNextRowChangeLead
    selectNextColumn
    copy
    clearSelection
    scrollDown
    cut
    selectLastRowExtendSelection
    selectPreviousColumn
    scrollUpExtendSelection
    toggleAndAnchor
    selectAll
    paste
    selectPreviousRow
    selectPreviousColumnExtendSelection
    selectNextColumnExtendSelection
    selectNextRow
    dc je suppose que la touche haut est selectPreviousRow et la touche bas est selectNextRow.

    mais je sais pas comment me servir de cette clé maintenant.
    j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Action action = map.getAction(selectPreviousRow); 
    mon_JButton.setAction(action);
    sauf que le compilo , il reconnait pas le parametre de getAction.il dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cannot find symbol
    symbol  : variable selectPreviousRow
    donc ça doit pas etre comme ça qu'il faut l'écrire dans le getAction()
    pourrais tu re-m'aider ?

    merci

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    je viens de tester un truc mais ça marche pas encore.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    KeyStroke cle = KeyStroke.getKeyStroke("selectPreviousRow");
    Action action = map.getAction(cle); 
    mon_JButton.setAction(action);
    j'ai ça comme erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    cannot find symbol
    symbol  : method getAction(javax.swing.KeyStroke)
    location: class javax.swing.ActionMap
    		Action action = map.getAction(cle); 
                                       ^

  6. #6
    KKI
    KKI est déconnecté
    Membre habitué
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Par défaut
    Pour sélectionner l'élément précédent dans une JList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int index = jlist.getSelectedIndex();
    if (index > 0) {
      index--;
    } else {
      index = 0;
    }
    jlist.setSelectedIndex(index);
    jlist.ensureIndexIsVisible(index);
    Pour sélectionner l'élément suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int index = jlist.getSelectedIndex();
    if (index < jlist.getModel().getSize() -1) {
      index++;
    } else {
      index = 0;
    }
    jlist.setSelectedIndex(index);
    jlist.ensureIndexIsVisible(index);
    [/code]

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    merci pour ta réponse KKI. mais en fait, j'ai testé. et j'ai le meme probleme qu'avec mon code de départ qui était:
    Code:

    // pr monter dans la JList
    public void actionPerformed(ActionEvent e){
    int i = maJList.getMinSelectionIndex();
    maJList.setSelectedIndex(i-1);
    }

    //pour descendre dans la JList, idem sauf que i+1
    pour ton code et le mien, ça monte et ça descend bien dans la liste. Mais ( c un peu compliqué à expliquer mais je vais essayer de rester clair ) une fois que j'ai selectionné une ligne de la JList avec mes JButton "haut" et "bas" et que je clique sur mon JButton "ok" ça ne m'affiche pas ce ke je veux (une autre JList).

    Au départ, je croyais que c'était mon JButton "ok" qui ne marchait pas comme il fo. Mais en fin de compte, si je selectionne une ligne de la JList en cliquant directement dessus avec la souris puis que j'appuie sur mon JButton "ok", ça m'affiche exactement ce que je veux. J'en ai donc conclu que le Jbouton "ok" fonctionnait mais pas les Jbutton "haut" et "bas".

    donc j'ai ecrit a developpez.com et l'idée de avoiture semble très bonne car il utilise une autre technique (utiliser les actions des boutons du clavier). Mais je ne connaissais pas du tout. d'ou les 2 réponses qui ont suivi.

    alors si qqn sait comment résoudre mon probleme soit en utilisant les actions du clavier comme l'a proposé avoiture, soit comme j'avais fait au départ et qui ressemble (de loin , je sais... ) à ce que tu as fait KKI, ce serait cool de m'aider.



    j'espere que j'ai bien identifié d'ou vient le probleme. Vous etes d'accord avec moi que:

    - si je selectionne une ligne de la JList avec mes JButton "haut" et "bas" puis que je clique sur mon JButton "ok" ça ne m'affiche pas ce ke je veux
    - si je selectionne une ligne de la JList en cliquant directement dessus avec la souris puis que j'appuie sur mon JButton "ok", ça m'affiche exactement ce que je veux

    alors c'est que le probleme ne vient pas du Jbutton "ok" mais des JButton "haut" et "bas". Vous etes d'accord sur ce point ? ( ou bien, le probleme ne vient ni de mon JButton "ok" ni des Jbutton "haut " et "bas", et dans ce cas, je sais pas d'ou il vient.... )

    voila, j'espere que je suis comprehensible (sinon, il fo me le dire) et que vous pourrez m'aider.
    merci.

  8. #8
    KKI
    KKI est déconnecté
    Membre habitué
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Par défaut
    Quel est le code associé à ton JButton OK ? Et qu'est-il censé faire ?

  9. #9
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    salut,

    voici le code associé au bouton "ok".
    qd on selectionne une ligne de la 1ere JList, et qu'on appuie sur "ok" , ça doit me fait apparaitre une autre JList.

    au départ, je pensais que mon pb venait de ce listener. J'avais donc posté un message avec le code suivant. Mon probleme etait que ça ne m'affichait pas ce que je voulais après selection de la ligne avec les Jbuttons "haut" / "bas" puis appui sur le Jbutton "ok".

    et je me suis rendu compte qu'en selectionnant la ligne de la JList directement avec la souris, puis appui sur "ok", ça affichait tout correctement. Voila pourquoi je pense que le listener qui suit est bon , en fait, et que mes listeners des boutons "haut", "bas" sont faux.

    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
     
    public void actionPerformed(ActionEvent e){ 
     
     //si le menu 1 de la liste 0 est selectionné 
     //je veux afficher liste 1 
     if ((liste0.getSelectedValue()).equals("menu 1")){ 
        ecran.remove(liste0);  // ecran est le JPanel 
        ecran.add(liste1); 
        ecran.revalidate(); 
     } 
     
     
     //si le menu a de la liste 1 est selectionné 
     //je veux afficher liste 11       
     if ((liste1.getSelectedValue()).equals("menu a")){ 
        ecran.remove(liste1);  
        ecran.add(liste11); 
        ecran.revalidate(); 
     } 
     
     
     //si le menu 2 de la liste 0 est selectionné 
     //je veux afficher liste 2          
      if ((liste0.getSelectedValue()).equals("menu 2")){ 
         ecran.remove(liste0);  
         ecran.add(liste2); 
         ecran.revalidate(); 
      } 
    }
    merci pour votre aide.

  10. #10
    Membre expérimenté
    Avatar de JHelp
    Inscrit en
    Octobre 2002
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 185
    Par défaut
    Moi je me demande une chose, est-ceque tes boutons haut et bas font bien référence à la liste actuellement aficchée ?
    De plus dans le code de ton action de ton bouton tu pourait avoir des ennuis, car il faut savoir qu'une liste, même si elle n'est plus affichée, elle garde en mémoire la derniére selection.

  11. #11
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    slt,

    pour mon Jbutton "haut" , dans la classe de l'ecouteur correspondant, je faisais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public void actionPerformed(ActionEvent e){
     
    int i = liste0.getMinSelectionIndex();
    int j = liste1.getMinSelectionIndex();
    int k = liste2.getMinSelectionIndex();
    int l = liste3.getMinSelectionIndex();
    int m = liste4.getMinSelectionIndex();
    liste0.setSelectedIndex(i+1); 
    liste1.setSelectedIndex(j+1);
    liste2.setSelectedIndex(k+1); 
    liste3.setSelectedIndex(l+1);
    liste4.setSelectedIndex(m+1);
    }
    idem pr bouton "bas" sauf que -1.

    J'ai essayé la méthode de KKI. ce qui me donne pour le bouton "haut":
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    public void actionPerformed(ActionEvent e){
     
    //pour liste0
    int index_liste0= liste0.getSelectedIndex(); 
    if (index_liste0> 0) { 
       index_liste0--; 
    }
    else { 
       index_liste0= 0; 
    } 
    liste0.setSelectedIndex(index_liste0); 
    liste0.ensureIndexIsVisible(index_liste0); 
     
    //pour liste1
    int index_liste1= liste1.getSelectedIndex(); 
    if (index_liste1> 0) { 
       index_liste1--; 
    }
    else { 
        index_liste1= 0; 
    } 
    liste1.setSelectedIndex(index_liste1); 
    liste1.ensureIndexIsVisible(index_liste1); 
     
     
    //pour liste2
    int index_liste2= liste2.getSelectedIndex(); 
    if (index_liste2> 0) { 
        index_liste2--; 
    }
    else { 
       index_liste2= 0; 
    } 
    liste2.setSelectedIndex(index_liste2); 
    liste2.ensureIndexIsVisible(index_liste2); 
     
     
    //pour liste3
    int index_liste3= liste3.getSelectedIndex(); 
    if (index_liste3> 0) { 
       index_liste3--; 
    }
    else { 
       index_liste3= 0; 
    } 
    liste3.setSelectedIndex(index_liste3); 
    liste3.ensureIndexIsVisible(index_liste3); 
     
     
    //pour liste4
    int index_liste4= liste4.getSelectedIndex(); 
    if (index_liste4> 0) { 
       index_liste4--; 
    }
    else { 
        index_liste4= 0; 
    } 
    liste4.setSelectedIndex(index_liste4); 
    liste4.ensureIndexIsVisible(index_liste4); 
     
    }
    donc dans les 2 méthodes, toutes mes listes sont présentes. donc pour moi, quelle que soit la liste affichée, les boutons "haut" et "bas" devaient marcher dans tous les listes. Je me trompe?

    JHelp, que veux tu dire dans
    dans le code de ton action de ton bouton tu pourait avoir des ennuis,...,
    une liste, même si elle n'est plus affichée, elle garde en mémoire la derniére selection.
    tu parles du bouton"ok" ou des boutons haut" et "bas"?
    car je ne l'ai pas encore fait, mais j'aurais un JButton qui doit me permettre de revenir a la JList précédente : ainsi je dois pouvoir selectionner une autre ligne. mais si la liste garde en memoire la selection, je risque d'avoir des pbs a ce moment la.

  12. #12
    Membre expérimenté
    Avatar de JHelp
    Inscrit en
    Octobre 2002
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 185
    Par défaut
    Bon en voyant ton code, je vois ou est le probléme.
    En fait,tu avances sur toutes les listes quelles soient affichées ou non. Il faudra avancé seulement sur la liste affichée.
    Oui je te parlais de la touvhe ok.
    Pour résoudre ton probléme, fait comme dans l'exemple que je t'ai fournis sur les JList l'autre jour.
    En fait l'astuce est de gardé un pointeur sur la liste actuellement affichée, ainsi plus de soucis, car si tu te sert seulement de la liste pointée pour monté, descendre ou ok, tu est sur de le faire sur la bonne liste, si tu mets ton pointeur à jour dans ok.
    J'espére que j'ai été clair, sinon n'hésites pas.

  13. #13
    KKI
    KKI est déconnecté
    Membre habitué
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Par défaut
    Effectivement le problème est bien que chaque clic sur un bouton haut/bas fait changer la sélection dans chaque liste alors que lorsque tu cliques à la souris, tu le fais obligatoirement sur la seule liste visible...

    Outre la méthode proposée par jHelp, tu peux utiliser une seule liste avec des tableaux de données différents que tu changes à la demande avec http://java.sun.com/j2se/1.5.0/docs/....Object&#91;]) ou mieux des modèles de données de liste [url]http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JList.html#setModel(javax.swing.ListModel)[/code]. Bien sûr, dans les deux cas tu devras maintenir si nécessaire l'index sélectionné pour chaque tableau ou modèle de données.

    Toutefois, masquer une liste et la remplacer par une autre ne me semble pas très académique... Lorque l'on désire présenter à l'utilisateur un enchaînement de saisies, on implémente plutôt un wizard, je t'inviterai donc à consulter cet url http://java.sun.com/developer/techni...ard/index.html.

  14. #14
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    Bonsoir,

    tout d'abord, merci pour toutes vos explications.
    alors j'ai essayé tout ça.

    ça fonctionne très bien quand il s'agit de JList remplies en dures par des Strings.

    Mais j'ai également 2 JList qui se remplissent lors de l'appel d'une fonction. Ces JList vont constamment changées ( ce sont des noms à l'intérieur, or on peut ajouter des noms ou en supprimer ).

    J'ai donc essayé avec setModel(). Mais quand je lance mon programme, je me retrouve avec le meme probleme qu'auparavant: ça n'affiche pas ce que je veux. J'en conclut qu'il doit toujours y avoir un probleme de pointeur.

    Si je mets les JLists construites à partir des setModel() en commentaires, alors tout fonctionne bien: je peux descendre dans ma liste, selectionner une ligne et ça m'affiche ce que je veux. Si j'enleve les commentaires, j'ai le probleme que ça n'affiche pas ce qu'il faut.

    Voici une partie du code de la classe ihm principale:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    public class ma_classe_test extends JFrame {
     
    ...
    private JList[] listes = new JList[5]; 
    private JList liste; 
     
    	public ma_classe_test(){ 		
    		super("titre");
    		...		
     
    		String[] t = new String[2]; 
    		t[0] = "voir liste 1";
    		t[1] = "voir liste 2";
    		this.listes[0] = new JList(); 
    		this.listes[0].setListData(t); 
     
    		String[] t2 = new String[4]; 
    		t2[0] = "sous menu 1 liste 1";
    		t2[1] = "sous menu 2 liste 1";
    		t2[2] = "sous menu 3 liste 1";
    		t2[3] = "sous menu 4 liste 1";
    		this.listes[1] = new JList(); 
    		this.listes[1].setListData(t2); 
     
    		String[] t3 = new String[3]; 
    		t3[0] = "sous menu 1 liste 2";
    		t3[1] = "sous menu 2 liste 2";
    		t3[2] = "sous menu 3 liste 2";
    		this.listes[2] = new JList(); 
    		this.listes[2].setListData(t3); 
     
     
    		Set coll;
    		coll = r.liste(); //appel d'une methode d'une autre classe: affichage d'une liste de noms 
    		DefaultListModel lm=new DefaultListModel();
    		Iterator it=coll.iterator();
    		while( it.hasNext() ){
    		    Object oo=it.next();
    		    lm.addElement(oo);
    		}
    		this.listes[3] = new JList();
    		this.listes[3].setModel(lm);
     
     
    		Set coll2;
    		coll2 = b.liste_2();
    		DefaultListModel lm2=new DefaultListModel();
    		Iterator it2=coll2.iterator();
    		while( it2.hasNext() ){
    		    Object oo2=it2.next();
    		    lm2.addElement(oo2);
    		}
    		this.listes[4] = new JList();
    		this.listes[4].setModel(lm2);
     
    		ecran.add(this.listes[0],BorderLayout.NORTH);
    		this.liste = this.listes[0]; 
     
    		JButton b1 = new JButton ("ok");
    		JButton b4 = new JButton ("bas");
    		...					
     
     
    		ect1 e1 = new ect1(ecran, liste, listes[1], listes[2], listes[3], listes[4]);
    		b1.addActionListener(e1);
     
    		ect4 e4 = new ect4 (liste, listes[1],listes[2],listes[3], listes[4]);
    		b4.addActionListener(e4);
     
    		pack();
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setVisible(true);
     
    	}
     
    }
    voici le code de l'ecouteur du JButton "ok":
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    public class ect1 implements ActionListener{
     
    	 private JList liste0,liste1,liste2,liste3,liste4; 
    	 private JPanel ecran;
     
        public ect(JPanel ecran, JList liste_0, JList liste_1, JList liste_2, JList liste_3, JList liste_4){
    		this.ecran = ecran;
    		liste0 = liste_0;
    		liste1 = liste_1;
    	   liste2 = liste_2;
    		liste3 = liste_3;
    		liste4 = liste_4;
    	 }
     
     
    	public void actionPerformed(ActionEvent e){
     
    		if (liste0.getSelectedValue()!=null && liste0.getSelectedValue().equals("voir liste 1") ){ 
    			ecran.remove(liste0); 
    			liste0 = liste1; 
    			ecran.add(liste0, BorderLayout.NORTH); 
    			ecran.revalidate(); 
    			ecran.repaint(); 
    		}
     
    		if (liste0.getSelectedValue()!=null && liste0.getSelectedValue().equals("voir liste 2") ){ 
    			ecran.remove(liste0); 
    			liste0 = liste2; 
    			ecran.add(liste0, BorderLayout.NORTH); 
    			ecran.revalidate(); 
    			ecran.repaint(); 
    		}
     
     
    		//probleme pour ce if
    		if (liste1.getSelectedValue()!=null && liste1.getSelectedValue().equals("sous menu 1 liste 1") ){ 
    			ecran.remove(liste1); 
    			liste0 = liste3; 
    			//ou liste1 = liste3; 		//j'ai testé les 2 mais les 2 ne marchent pas
    			ecran.add(liste0, BorderLayout.NORTH); 
    			//ou ecran.add(liste1, BorderLayout.NORTH); 
    			ecran.revalidate(); 
    			ecran.repaint(); 
    		}
     
    		//probleme pour ce if
    		if (liste2.getSelectedValue()!=null && liste2.getSelectedValue().equals("sous menu 1 liste 2") ){ 
    			ecran.remove(liste2); 
    			liste0 = liste4; 
    			//ou liste2 = liste4;		//j'ai testé les 2 mais les 2 ne marchent pas
    			ecran.add(liste0, BorderLayout.NORTH); 
    			// ou ecran.add(liste2, BorderLayout.NORTH); 
    			ecran.revalidate(); 
    			ecran.repaint(); 
    		}
    	}
    }
    pour l'ecouteur "haut" et "bas", j'utilise la methode de KKI, appliquée à chacune de mes JList.
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    public void actionPerformed(ActionEvent e){ 
     
    //pour liste0 
    int index_liste0= liste0.getSelectedIndex(); 
    if (index_liste0> 0) { 
       index_liste0--; 
    } 
    else { 
       index_liste0= 0; 
    } 
    liste0.setSelectedIndex(index_liste0); 
    liste0.ensureIndexIsVisible(index_liste0); 
     
    //pour liste1 
    int index_liste1= liste1.getSelectedIndex(); 
    if (index_liste1> 0) { 
       index_liste1--; 
    } 
    else { 
        index_liste1= 0; 
    } 
    liste1.setSelectedIndex(index_liste1); 
    liste1.ensureIndexIsVisible(index_liste1); 
     
     
    //pour liste2 
    int index_liste2= liste2.getSelectedIndex(); 
    if (index_liste2> 0) { 
        index_liste2--; 
    } 
    else { 
       index_liste2= 0; 
    } 
    liste2.setSelectedIndex(index_liste2); 
    liste2.ensureIndexIsVisible(index_liste2); 
     
     
    //pour liste3 
    int index_liste3= liste3.getSelectedIndex(); 
    if (index_liste3> 0) { 
       index_liste3--; 
    } 
    else { 
       index_liste3= 0; 
    } 
    liste3.setSelectedIndex(index_liste3); 
    liste3.ensureIndexIsVisible(index_liste3); 
     
     
    //pour liste4 
    int index_liste4= liste4.getSelectedIndex(); 
    if (index_liste4> 0) { 
       index_liste4--; 
    } 
    else { 
        index_liste4= 0; 
    } 
    liste4.setSelectedIndex(index_liste4); 
    liste4.ensureIndexIsVisible(index_liste4); 
     
    }
    il n'y a donc plus que le probleme avec les JList sur lesquelles j'ai mis un setModel(). Voila, vous m'avez deja beaucoup aidé et je vous en remercie sincèrement. Si vous pouviez une nouvelle fois me corriger, ce serait vraiment bien.

  15. #15
    KKI
    KKI est déconnecté
    Membre habitué
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Par défaut
    Dans mon dernier message je te proposais d'utiliser UNE JList avec plusieurs tableaux de données ou modèles de données de liste et de changer le tableau ou modèle de ta liste en fonction des besoins.
    (Par exemple, ton objet ect1 doit être créé en lui passant 1 JList et 4 tableaux de données ou modèles et non pas 4 listes).

    Or dans ton code tu continue à utiliser plusieurs JList que tu mets dans un tableau... Tu auras donc toujours le même problème.

  16. #16
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    bonjour,
    ça fait longtemps que j'aurai du répondre. desole. comme je pensais qu'en utilisant la souris, mon probleme était momentanémént résolu, j'ai continué mon projet en me disant que je reviendrai sur ce probleme plus tard. mais voila: il semble que j'ai qd meme un probleme du meme genre avec des jtextfield (j'ai posté un autre message pour ça).

    je me repenche dc sur ce pb des JList. g essayé de faire comme tu as dit KKI.
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    //Jbouton"ok"
    public class ect_test implements ActionListener{
     
     public ect_test (JPanel ecran, JList liste, String[] menu1, String[] menu2, String[] menu3,DefaultListModel lm, DefaultListModel lm2){
    ...
    }
     
    public void actionPerformed(ActionEvent e){
     
    if (liste.getSelectedValue()!=null && liste.getSelectedValue().equals("menu 1") ){
    ecran.remove(liste);
    liste = new JList(menu1);
    ecran.add(liste,BorderLayout.NORTH);	 
    ecran.revalidate();
    }
     
    if (liste.getSelectedValue()!=null && liste.getSelectedValue().equals("menu2") ){
    ecran.remove(liste);
    liste = new JList(menu2);
    ecran.add(liste,BorderLayout.NORTH);	 
    ecran.revalidate();
    }
     
    if( liste.getSelectedValue()!=null && liste.getSelectedValue().equals("affichage")){
    ecran.remove(liste);
    liste = new JList(lm2);
    ecran.add(liste, BorderLayout.NORTH);
    ecran.revalidate();
    }
     
    if( liste.getSelectedValue()!=null && liste.getSelectedValue().equals("lister")){
    ecran.remove(liste);
    liste = new JList(lm);
    ecran.add(liste, BorderLayout.NORTH);
    ecran.revalidate();
    }
     
    if( liste.getSelectedValue()!=null){
    String p = (String)(liste.getSelectedValue());
    textarea.setText("appel d'une methode"); 
    ecran.remove(liste);
    ecran.add(textarea, BorderLayout.NORTH);
    ecran.revalidate();
    }
    ...
    donc qd je selectionne avec la souris, ça m'affiche bien ce que je veux.

    g modifié les ecouteurs des JButton "haut" et "bas". et c'est la mon probleme. que faut il que je passe en parametre du constructeur? juste la liste ? la liste, les tableaux, les listModel ? g essayé avec juste la liste, mais comme ds la classe qui étend JFrame, j'ai passé un tableau en parametre de ma jlist, la jlist est deja formée. dc le JButton ne fonctionne que sur cette jlist. g essayé avec tous les parametres , et ça ne fonctionne pas non plus.
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    //Jbutton "bas"
    public class ect_bas implements ActionListener{
     
        public ect_bas (JList liste, String[] menu1, String[] menu2, String[] menu3, DefaultListModel lm, DefaultListModel lm2){
    ...		
    }
     
       public void actionPerformed(ActionEvent e){
     
      int index1 = liste.getSelectedIndex(); 
      if (index1 < liste.getModel().getSize() -1) { 
        index1++; 
      }
      else { 
        index1 = 0; 
      } 
      liste.setSelectedIndex(index1); 
      liste.ensureIndexIsVisible(index1); 
     
      liste = new JList(menu2);
      int index2 = liste.getSelectedIndex(); 
      if (index2 < liste.getModel().getSize() -1) { 
        index2++; 
      }
      else { 
       index2 = 0; 
      } 
      liste.setSelectedIndex(index2); 
      liste.ensureIndexIsVisible(index2); 
     
    /*				
    //idem pour menu3			
    ...
    */
     
     
     liste = new JList(lm2);
     int index4 = liste.getSelectedIndex(); 
     if (index4 < liste.getModel().getSize() -1) { 
       index4++; 
     }
     else { 
       index4 = 0; 
     } 
    liste.setSelectedIndex(index4); 
    liste.ensureIndexIsVisible(index4); 
     
     
    /*				
    //idem pour lm			
    ...
    */
     
     
     
    	}
     
    }
    voila ou j'en suis.
    dc si qqn peut m'aider

  17. #17
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    juste pr dire que ça fonctionne enfin.
    je me suis basé sur la methode de KKI.
    dc je tiens a remercier ceux qui m'ont aidé.

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

Discussions similaires

  1. [Jlist] faire des lignes avec boutons
    Par matt22 dans le forum Composants
    Réponses: 1
    Dernier message: 27/11/2006, 16h21
  2. Réponses: 6
    Dernier message: 13/11/2006, 16h29
  3. [UBUNTU] Problèmes avec mon clavier
    Par Franck.H dans le forum Ubuntu
    Réponses: 4
    Dernier message: 25/07/2006, 22h20
  4. [VB6][DirListBox] Manier un DirListBox avec le clavier?
    Par Gothico dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 20/02/2006, 09h08
  5. Probleme avec touches clavier et évènement On Key Down
    Par emmental dans le forum C++Builder
    Réponses: 3
    Dernier message: 28/11/2005, 13h17

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