Sellection multiple

Résolu/Fermé
Soso - 10 juin 2013 à 13:34
 Soso - 11 juin 2013 à 23:20
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

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

puis de les récupérer dans un tableau avec :
jList1.getSelectedValues()
1
merci pour cette piste mais ça ne fonctionne pas, la sélection se fait tjr sur le premier élément
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 10/06/2013 à 22:21
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
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
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
la methode getSelectedValues() me renvoie un String style :
[Ljava.lang.Object;@108786b
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
11 juin 2013 à 05:45
"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
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
11 juin 2013 à 14:53
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
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