[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 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. 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. 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