[JAVA] JList Multiselection - Suppression

Résolu
Bonjour, je réalise un programme qui permet de remplir grâce à une BDD SQLServer, une JList à sélection multiple. Cette partie fonctionne très bien... ^^ Enfin sauf presque ^^"
Ensuite j'ai un bouton "Supprimer" qui comme son nom l'indique, doit supprimer... mais quoi ? Il doit supprimer les éléments sélectionnés dans la JList.

Mes problèmes :
- je n'arrive pas à supprimer tous les éléments sélectionnés... que se soit dans la liste ou dans ma BDD.
- la sélection multiple ne se fait qu'avec le bouton "Ctrl".
- j'aimerai que dès le lancement du programme, tous les éléments soient sélectionnés.

Pouvez-vous m'aider à résoudre ces problèmes ?
Merci d'avance...

Je vous fournis mon code. D'ailleurs s'il y a des critiques n'hésitez pas à les faire, pour que j'améliore mon code ^^ :

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

public class Fenetre extends JFrame implements ActionListener
{
	public JPanel container = new JPanel();
	public static JList list = new JList();
	public static DefaultListModel dlm=new DefaultListModel();
	public static Connection cnx;
	public static int c, i;
	
	public static void main(String[] args)
	{
		Fenetre fen = new Fenetre();
		try
		{
			//Connection à la base de données
                        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			cnx=DriverManager.getConnection("jdbc:sqlserver://localhost;database=test;user=sa;password=Administrateur");
			Statement state = cnx.createStatement();
			ResultSet result = state.executeQuery("SELECT id FROM dbo.Pratica WHERE id NOT IN (SELECT id_pratica FROM Faldone WHERE id_scomparto IS NOT NULL)ORDER BY id");
			ResultSetMetaData resultMeta = result.getMetaData();
		
			//Création de la JList
			list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );  
			while(result.next())
			{ 
				dlm.addElement(result.getString("id"));
			}
			list.setModel(dlm);
			
			//Fermeture
			result.close();
			state.close();
		}
		catch (Exception e)
		{
			System.out.println("Une erreur est survenue !");
			e.printStackTrace();
		}
	}
	
	public Fenetre()
	{       
		//Création de la fenêtre	
		JPanel panel = new JPanel();
		panel.add(list);
		JButton bouton = new JButton("Supprimer");
		bouton.addActionListener(this);
		panel.add(bouton);
		
		this.setTitle("Suppression");
		this.setSize(400, 500);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
		container.setBackground(Color.white);
		container.setLayout(new BorderLayout());
		container.add(panel, BorderLayout.CENTER);
		
		this.setContentPane(container);
		this.setVisible(true);   			
	}
	
	public void actionPerformed(ActionEvent e)
	{
		//Evénement sur le boutton :
		//Supprime tous les éléments sélectionnés dans la JList
		c = dlm.size() ; //Compte le nombre d'élément dans la JList
		for (i=0;i<c;i++)
		{
			if (list.isSelectedIndex(i)) // si l'élément est sélectionné alors...
			{
				System.out.println("Valeur de la selection " + dlm.get(i));
				//Suppression du CAMPI_1 
				Statement state2;
				try
				{
					state2 = cnx.createStatement();
					state2.executeUpdate("DELETE FROM dbo.CAMPI_1 WHERE id_pratica = " + list.getSelectedValue());
					state2.close();
				} 
				catch(Exception e1)
				{
                    System.out.println("Une erreur est survenue !");
                    e1.printStackTrace();
                                }
				//Suppresion du faldone 
				Statement state3;
				try
				{
					state3 = cnx.createStatement();
					state3.executeUpdate("DELETE FROM dbo.Faldone WHERE id_pratica = " + list.getSelectedValue());
					state3.close();
				} 
				catch(Exception e1)
				{
                    System.out.println("Une erreur est survenue !");
                    e1.printStackTrace();
                                 }
				//Suppression du Pratica
				Statement state4;
				try
				{
					state4 = cnx.createStatement();
					state4.executeUpdate("DELETE FROM dbo.Pratica WHERE id = " + list.getSelectedValue());
					state4.close();
				} 
				catch(Exception e1)
				{
                    System.out.println("Une erreur est survenue !");
                    e1.printStackTrace();
                }			
			}
			else 
				{
				System.out.println(dlm.get(i) + " pas sélectionné.");
				}
			dlm.remove(i);
		}
	}
	
}
Configuration: Windows XP
Firefox 3.0

4 réponses

  1. Bon j'ai encore résolu un de mes problèmes ^^"
    Mais il m'en reste encore un... et après j'ai fini ^^
    - la sélection multiple ne se fait qu'avec le bouton "Ctrl".

    J'aimerai qu'elle se fasse seulement avec le clic de la souris... c'est possible ou non ? On m'a dit que oui mais j'ai pas eu de solution... HELP PLEASE !

    Voici mon code modifié :

    import java.awt.*;
    import java.awt.event.*;
    import java.sql.*;
    import javax.swing.*;
    
    public class Fenetre extends JFrame implements ActionListener
    {
    	
    	public JPanel container = new JPanel();
    	public static JList list = new JList();
    	public static DefaultListModel dlm=new DefaultListModel();
    	public static Connection cnx;
    	public static int c, i;
    	
    	public static void main(String[] args)
    	{
    		Fenetre fen = new Fenetre();
    		try
    		{
    			//Connection à la base de données
    			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    			cnx=DriverManager.getConnection("jdbc:sqlserver://localhost;database=test;user=sa;password=Administrateur");
    			Statement state = cnx.createStatement();
    			ResultSet result = state.executeQuery("SELECT id FROM dbo.Pratica WHERE id NOT IN (SELECT id_pratica FROM Faldone WHERE id_scomparto IS NOT NULL)ORDER BY id");
    		
    			//Création de la JList en multi-sélection
    			list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );  
    			while(result.next())
    			{ 
    				dlm.addElement(result.getString("id"));
    			}
    			list.setModel(dlm);
    			//Sélection de tous les items dans la JList
    			list.addSelectionInterval(0, dlm.size());	
    			
    			//Fermeture
    			result.close();
    			state.close();
    		}
    		catch (Exception e)
    		{
    			System.out.println("Une erreur est survenue !");
    			e.printStackTrace();
    		}
    	}
    	
    	public Fenetre()
    	{       
    		//Création d'une fenêtre pour encadrer la JList
    		JScrollPane listScroller = new JScrollPane(list);
    		listScroller.setPreferredSize(new Dimension(190, 240));
    		JPanel panel = new JPanel();
    		panel.add(listScroller);
    		JButton bouton = new JButton("Supprimer");
    		bouton.addActionListener(this);
    		panel.add(bouton);
    		
    		//Création de la consigne
    		JLabel label = new JLabel("Désélectionnez les éléments que vous ne voulez pas supprimer.");
    		label.setHorizontalAlignment(JLabel.CENTER);
    		
    		//Création de la fenêtre
    		this.setTitle("Suppression");
    		this.setSize(400, 300);
    		this.setLocationRelativeTo(null);
    		setResizable(false); 
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	
    		container.setLayout(new BorderLayout());
    		container.add(panel, BorderLayout.CENTER);
    		container.add(label, BorderLayout.NORTH);
    		
    		this.setContentPane(container);
    		this.setVisible(true);   			
    	}
    	
    	public void actionPerformed(ActionEvent e)
    	{
    		//Evénement sur le boutton :
    		//Supprime tous les éléments sélectionnés dans la JList
    		c = dlm.size() ; //Compte le nombre d'élément dans la JList
    		for (i=0;i<c;i++)
    		{
    			if (list.isSelectedIndex(i)) // si l'élément est sélectionné alors...
    			{
    				//Suppression du CAMPI_1 
    				Statement state2;
    				try
    				{
    					state2 = cnx.createStatement();
    					state2.executeUpdate("DELETE FROM dbo.CAMPI_1 WHERE id_pratica = " + dlm.get(i));
    					//state2.close();
    				} 
    				catch(Exception e1)
    				{
                        System.out.println("Une erreur est survenue !");
                        e1.printStackTrace();
                    }
    				//Suppresion du faldone 
    				Statement state3;
    				try
    				{
    					state3 = cnx.createStatement();
    					state3.executeUpdate("DELETE FROM dbo.Faldone WHERE id_pratica = " + dlm.get(i));
    					//state3.close();
    				} 
    				catch(Exception e1)
    				{
                        System.out.println("Une erreur est survenue !");
                        e1.printStackTrace();
                    }
    				//Suppression du Pratica
    				Statement state4;
    				try
    				{
    					state4 = cnx.createStatement();
    					state4.executeUpdate("DELETE FROM dbo.Pratica WHERE id = " + dlm.get(i));
    					//state4.close();
    				} 
    				catch(Exception e1)
    				{
                        System.out.println("Une erreur est survenue !");
                        e1.printStackTrace();
                    }
    			}
    		}
    		//Supprimer tous les éléments de la JList
    		dlm.clear();
    		
    		//Raffraichir la JList
    		try
    		{
    			Statement state4 = cnx.createStatement();
    			ResultSet result = state4.executeQuery("SELECT id FROM dbo.Pratica WHERE id NOT IN (SELECT id_pratica FROM Faldone WHERE id_scomparto IS NOT NULL)ORDER BY id");
    	
    			//Création de la JList en multi-sélection
    			list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );  
    			while(result.next())
    			{ 
    				dlm.addElement(result.getString("id"));
    			}
    			list.setModel(dlm);
    			//Sélection de tous les items dans la JList
    			list.addSelectionInterval(0, dlm.size());
    			
    			//Fermeture
    			result.close();
    			state4.close();
    		}
    		catch(Exception e1)
    		{
                System.out.println("Une erreur est survenue !");
                e1.printStackTrace();
            }
    	}
    }
    1. Bon j'ai résolu mon problème majeur ^^"
      MAIS pas les autres :

      - la sélection multiple ne se fait qu'avec le bouton "Ctrl".
      - j'aimerai que dès le lancement du programme, tous les éléments soient sélectionnés.


      Je remet le code que je viens de changer ^^ , j'ai mis en gras et souligner le nouveau code :

      import java.awt.*;
      import java.awt.event.*;
      import java.sql.*;
      import javax.swing.*;
      
      public class Fenetre extends JFrame implements ActionListener
      {
      	
      	public JPanel container = new JPanel();
      	public static JList list = new JList();
      	public static DefaultListModel dlm=new DefaultListModel();
      	public static Connection cnx;
      	public static int c, i;
      	static int[] a;
      	
      	public static void main(String[] args)
      	{
      		Fenetre fen = new Fenetre();
      		try
      		{
      			//Connection à la base de données
      			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
      			cnx=DriverManager.getConnection("jdbc:sqlserver://localhost;database=test;user=sa;password=Administrateur");
      			Statement state = cnx.createStatement();
      			ResultSet result = state.executeQuery("SELECT id FROM dbo.Pratica WHERE id NOT IN (SELECT id_pratica FROM Faldone WHERE id_scomparto IS NOT NULL)ORDER BY id");
      			ResultSetMetaData resultMeta = result.getMetaData();
      		
      			//Création de la JList
      			list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );  
      			while(result.next())
      			{ 
      				dlm.addElement(result.getString("id"));
      			}
      			list.setModel(dlm);
      			//Sélection de tous les items dans la JList
      			
      			
      			//Fermeture
      			result.close();
      			state.close();
      		}
      		catch (Exception e)
      		{
      			System.out.println("Une erreur est survenue !");
      			e.printStackTrace();
      		}
      	}
      	
      	public Fenetre()
      	{       
      		//Création de la fenêtre	
      		JPanel panel = new JPanel();
      		panel.add(list);
      		JButton bouton = new JButton("Supprimer");
      		bouton.addActionListener(this);
      		panel.add(bouton);
      		
      		this.setTitle("Suppression");
      		this.setSize(400, 500);
      		this.setLocationRelativeTo(null);
      		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      	
      		container.setBackground(Color.white);
      		container.setLayout(new BorderLayout());
      		container.add(panel, BorderLayout.CENTER);
      		
      		this.setContentPane(container);
      		this.setVisible(true);   			
      	}
      	
      	public void actionPerformed(ActionEvent e)
      	{
      		//Evénement sur le boutton :
      		//Supprime tous les éléments sélectionnés dans la JList
      		c = dlm.size() ; //Compte le nombre d'élément dans la JList
      		for (i=0;i<c;i++)
      		{
      			if (list.isSelectedIndex(i)) // si l'élément est sélectionné alors...
      			{
      				System.out.println("Valeur de la selection " + dlm.get(i));
      				//Suppression du CAMPI_1 
      				Statement state2;
      				try
      				{
      					state2 = cnx.createStatement();
      					state2.executeUpdate("DELETE FROM dbo.CAMPI_1 WHERE id_pratica = " + dlm.get(i));
      					//state2.close();
      				} 
      				catch(Exception e1)
      				{
                          System.out.println("Une erreur est survenue !");
                          e1.printStackTrace();
                      }
      				//Suppresion du faldone 
      				Statement state3;
      				try
      				{
      					state3 = cnx.createStatement();
      					state3.executeUpdate("DELETE FROM dbo.Faldone WHERE id_pratica = " + dlm.get(i));
      					//state3.close();
      				} 
      				catch(Exception e1)
      				{
                          System.out.println("Une erreur est survenue !");
                          e1.printStackTrace();
                      }
      				//Suppression du Pratica
      				Statement state4;
      				try
      				{
      					state4 = cnx.createStatement();
      					state4.executeUpdate("DELETE FROM dbo.Pratica WHERE id = " + dlm.get(i));
      					//state4.close();
      				} 
      				catch(Exception e1)
      				{
                          System.out.println("Une erreur est survenue !");
                          e1.printStackTrace();
                      }			
      			}
      			else 
      			{
      				System.out.println(dlm.get(i) + " pas sélectionné.");
      			}
      		}
      		//Raffraichir pour une nouvelle utilisation
      		dlm.clear();
      	}
      	
      }
      
      1. Bon bin du coup j'ai finit mon programme toute seule... Je n'ai pas résolue mon problème comme je le voulais mais je suis passée par un autre chemin ^^ Merci à Maxime le roi du JAVA ^^

        Voici le code pour ceux que cela intéressera pour plus tard... Il est pas parfait, mais ça marche ^^"

        import java.awt.*;
        import java.awt.event.*;
        import java.sql.*;
        import javax.swing.*;
        
        public class Fenetre extends JFrame implements ActionListener
        {
        	
        	public JPanel container = new JPanel();
        	public JButton boutonSupp, boutonSelect;
        	public JLabel label1, label2;
        	static JList list = new JList();
        	static DefaultListModel dlm=new DefaultListModel();
        	static Connection cnx;
        	static int i;
        	
        	public static void main(String[] args)
        	{
        		Fenetre fen = new Fenetre();
        		try
        		{
        			//Connection à la base de données
        			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        			cnx=DriverManager.getConnection("jdbc:sqlserver://localhost;database=test;user=sa;password=Administrateur");
        			Statement state = cnx.createStatement();
        			ResultSet result = state.executeQuery("SELECT id FROM dbo.Pratica WHERE id NOT IN (SELECT id_pratica FROM Faldone WHERE id_scomparto IS NOT NULL)ORDER BY id");
        		
        			//Création de la JList en multi-sélection
        			while(result.next())
        			{ 
        				dlm.addElement(result.getString("id"));
        			}
        			list.setModel(dlm);
        			//Sélection de tous les items dans la JList
        			list.addSelectionInterval(0, dlm.size()-1);	
        			
        			//Fermeture
        			result.close();
        			state.close();
        		}
        		catch (Exception e)
        		{
        			System.out.println("Une erreur est survenue !");
        			e.printStackTrace();
        		}
        	}
        	
        	public Fenetre()
        	{       
        		//Création d'une fenêtre pour encadrer la JList
        		JScrollPane listScroller = new JScrollPane(list);
        		listScroller.setPreferredSize(new Dimension(180, 240));
        		JPanel panel = new JPanel();
        		panel.add(listScroller);
        		
        		//Création des boutons
        		boutonSupp = new JButton("Supprimer");
        		boutonSupp.addActionListener(this);
        		panel.add(boutonSupp);
        		boutonSelect = new JButton("Tout sélectionner");
        		boutonSelect.addActionListener(this);
        		panel.add(boutonSelect);
        		
        		//Création des consignes
        		label1 = new JLabel("Désélectionnez les éléments que vous ne voulez pas supprimer.");
        		label1.setHorizontalAlignment(JLabel.CENTER);
        		label2 = new JLabel("Pour désélectionner un élément faire CTRL + clic gauche.");
        		label2.setHorizontalAlignment(JLabel.CENTER);
        		
        		//Création de la fenêtre
        		this.setTitle("Suppression");
        		this.setSize(400, 340);
        		this.setLocationRelativeTo(null);
        		setResizable(false); 
        		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        	
        		container.setLayout(new BorderLayout());
        		container.add(panel, BorderLayout.CENTER);
        		container.add(label1, BorderLayout.NORTH);
        		container.add(label2, BorderLayout.SOUTH);
        		
        		this.setContentPane(container);
        		this.setVisible(true);   			
        	}
        	
        	public void actionPerformed(ActionEvent e)
        	{
        		Object  source=e.getSource();
        		//Si clique sur "Supprimer"
                if  (source==boutonSupp)
                {
                	//Supprime tous les éléments sélectionnés dans la JList
                	for (i=0;i<dlm.size();i++)
                	{
                		if (list.isSelectedIndex(i)) // si l'élément est sélectionné alors...
                		{
                			try
                			{
                				//Suppression du CAMPI_1 
                				Statement state2;
                				state2 = cnx.createStatement();
                				state2.executeUpdate("DELETE FROM dbo.CAMPI_1 WHERE id_pratica = " + dlm.get(i));
                				state2.close();
        			
                				//Suppresion du faldone 
                				state2 = cnx.createStatement();
                				state2.executeUpdate("DELETE FROM dbo.Faldone WHERE id_pratica = " + dlm.get(i));
                				state2.close();
        
                				//Suppression du Pratica
                				state2 = cnx.createStatement();
                				state2.executeUpdate("DELETE FROM dbo.Pratica WHERE id = " + dlm.get(i));
                				state2.close();
                			} 
                			catch(Exception e1)
                			{
                				System.out.println("Une erreur est survenue !");
                				e1.printStackTrace();
                			}
                		}
                	}
                	//Supprimer tous les éléments de la JList
                	dlm.clear();
        		
                	//Raffraichir la JList
                	try
                	{
                		Statement state3 = cnx.createStatement();
                		ResultSet result = state3.executeQuery("SELECT id FROM dbo.Pratica WHERE id NOT IN (SELECT id_pratica FROM Faldone WHERE id_scomparto IS NOT NULL)ORDER BY id");
                		
                		//Création de la JList en multi-sélection
                		while(result.next())
                		{ 
                			dlm.addElement(result.getString("id"));
                		}
                		list.setModel(dlm);
                		//Sélection de tous les items dans la JList
                		list.addSelectionInterval(0, dlm.size());
        			
                		//Fermeture
                		result.close();
                		state3.close();
                	}
                	catch(Exception e1)
                	{
                		System.out.println("Une erreur est survenue !");
                		e1.printStackTrace();
                	}
                }
                //Si clique sur "Tout sélectionner"
                else if (source==boutonSelect)
                	list.setSelectionInterval(0,dlm.size()-1);
        	}
        }
        1. Même avec du retard ça peut aider

          Prob 1 :
          http://docs.oracle.com/javase/tutorial/uiswing/events/listselectionlistener.html

          Prob2:
          int min = 0; 
          int max = liste.getSize() - 1 ; 
          liste.setSelectionInterval(min, max);


          En ayant auparavent autorisé la sélection multiple