[JAVA] JList Multiselection - Suppression

Résolu/Fermé
SamC7 - 23 juin 2009 à 09:34
 MicRo - 8 déc. 2011 à 14:30
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);
		}
	}
	
}
A voir également:

4 réponses

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