[JAVA] JList Multiselection - Suppression
Résolu
SamC7
-
MicRo -
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 ^^ :
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
-
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(); } } } -
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); } } -
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(); } } -
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