[JAVA] JList Multiselection - Suppression

Résolu
SamC7 -  
 MicRo -
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. SamC7
     
    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();
            }
    	}
    }
    2
  2. SamC7
     
    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
  3. SamC7
     
    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();
    	}
    	
    }
    
    0
  4. MicRo
     
    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
    0