[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. 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
      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();
          	}
          	
          }