Sellection multiple

Résolu
Soso -  
 Soso -
Bonjour,

J'ai récupéré puis modifié du code en Java comme ceci mais ma sélection est unique (si je sélectionne plusieurs données avec la touche ctrl seule la première est prise en compte)

Voici le code :

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Cadre1 extends JFrame {
JList jList1 = new JList();
JTextArea jTextArea1 = new JTextArea();
JButton jButton1 = new JButton();
DefaultListModel mdl = new DefaultListModel();

//Construire le cadre
public Cadre1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Initialiser le composant
private void jbInit() throws Exception {
this.getContentPane().setLayout(null);
this.setSize(new Dimension(320, 250));
this.setTitle("Copie d\'une liste vers une zone de texte");
// jTextArea1.setBounds(new Rectangle(350, 24, 200, 200));
jButton1.setText("jButton1");
// jButton1.setBounds(new Rectangle(350, 20, 500, 35));
jButton1.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
jTextArea1.setBounds(new Rectangle(189, 24, 100, 163));
jButton1.setText(">>");
jButton1.setBounds(125, 70, 55, 35);
this.getContentPane().add(jList1, null);
this.getContentPane().add(jTextArea1, null);
this.getContentPane().add(jButton1, null);

jList1.setModel(mdl); // association du jList1 au modèle:
jList1.setBounds(new Rectangle(17, 22, 100, 165));
// la modification (initialisation) du modèle:
mdl.addElement("un");
mdl.addElement("deux");
mdl.addElement("trois");
mdl.addElement("quatre");
mdl.addElement("cinq");
mdl.addElement("six");

}

//Remplacé (surchargé) pour pouvoir quitter lors de System Close
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if(e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}

void jButton1_actionPerformed(ActionEvent e) {
jTextArea1.append((String)jList1.getSelectedValue()+"\n"); // ajout de l'élément sélectionné
}
public static void main(String [] args){
JFrame frame = new Cadre1();
frame.setLayout(null);
frame.setVisible(true);
}
}

Merci d'avance pour votre aide

3 réponses

  1. Flog78
     
    Il suffit de spécifier :
    jList1.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);

    puis de les récupérer dans un tableau avec :
    jList1.getSelectedValues()
    1
  2. Soso
     
    merci pour cette piste mais ça ne fonctionne pas, la sélection se fait tjr sur le premier élément
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Il ne faut pas confondre la méthode getSelectedValue() qui renvoie le premier élément sélectionné et la méthode getSelectedValues() dont parle Flog78 qui renvoie elle un tableau avec tous les éléments sélectionnés.

      PS. getSelectedValues() est dépréciée depuis Java 7 et l'apparition de getSelectedValuesList()
      0
    2. Soso
       
      je ne comprends pas bien, comment utilise t'on cette fonction dans le cas de mon programme si je veux créer un tableau de String
      merci encore,
      0
  3. Soso
     
    j'ai fait ceci mais ça ne fonctionne pas mieux

    void jButton1_actionPerformed(ActionEvent e) {

    jList1.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    ArrayList<String> tab = new ArrayList<String>();
    tab.add(jList1.getSelectedValue().toString());

    for (int i=0; i < tab.size() ; i++){
    jTextArea1.append (tab.get(i)); // ajout de l'élément sélectionné
    jTextArea1.append ("\n");
    }
    }
    0
    1. Soso
       
      la methode getSelectedValues() me renvoie un String style :
      [Ljava.lang.Object;@108786b
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      "getSelectedValues() me renvoie un String style : [Ljava.lang.Object;"
      C'est parce que c'est un tableau comme je l'expliquais hier, or un tableau ne peux pas être affiché avec toString, il faut afficher ses cases une par une...

      void jButton1_actionPerformed(ActionEvent e)
      {
          for (Object obj : jList1.getSelectedValuesList())
              jTextArea1.append(obj.toString()+"\n");
      }

      Remarque : il est généralement bon de paramétrer ton JList avec le type d'élément qu'in contient, en l'occurrence dans ton cas des String. Tu n'as alors plus à faire explicitement la conversion de Object à String avec toString(), car tu manipuleras toujours directement des String.

      JList<String> jList1 = new JList<String>();
      jList1.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
      ...
      
      void jButton1_actionPerformed(ActionEvent e)
      {
          for (String str : jList1.getSelectedValuesList())
              jTextArea1.append(str+"\n");
      }
      0
    3. Soso
       
      merci mais voici l'erreur qu'il me renvoie :

      Cadre1.java:83: cannot find symbol
      symbol : method getSelectedValuesList()
      location: class javax.swing.JList
      for (String str : jList1.getSelectedValuesList())
      ^
      1 error
      0
    4. KX Messages postés 19031 Statut Modérateur 3 020
       
      Comme je l'expliquais hier, getSelectedValuesList() est nouveau à Java 7, si tu codes en Java 6 ou moins, tu dois te contenter de getSelectedValues() qui fonctionne pareil :

      void jButton1_actionPerformed(ActionEvent e)
      {
          for (String str : jList1.getSelectedValues())
              jTextArea1.append(str+"\n");
      }

      Remarque : Java 6 n'est plus soutenu par Oracle, il vaudrait mieux passer à Java 7...
      0
    5. Soso
       
      je ne comprends vraiment pas :

      voilà maintenant les messages que j'ai (incompatible type)

      Cadre1.java:84: incompatible types
      found : java.lang.Object
      required: java.lang.String
      for (String str : jList1.getSelectedValues())
      ^
      1 error


      quand je fais JList<String> j'ai le message suivant :

      Cadre1.java:11: type javax.swing.JList does not take parameters
      JList<String> jList1 = new JList<String>();
      ^
      Cadre1.java:11: type javax.swing.JList does not take parameters
      JList<String> jList1 = new JList<String>();
      ^
      2 errors
      0