Filter à partir d'un boutton en java

Recay2 Messages postés 26 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 29 juin 2012 - 14 févr. 2012 à 13:58
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 15 févr. 2012 à 08:26
Bonjour, j'ai une classe liste qui m'affiche les listes des contacts, le pb quand je clique sur le bouton A ou B je veux qu'il m'affiche que les prénom qui commence par A ou B etc...... Et je n'arrive pas à le faire svp j'ai vraiment besoin de votre aide.Merci

[code]

package client;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

public class Liste extends JFrame {

Vector columnNames = new Vector();
Vector data = new Vector();
static ResultSet rs;
static Connection conn;
static Statement stat;
private JTable table;
private TableRowSorter<TableModel> sorter;
private JFrame frame;
private JTextField filtertxt;
private JLabel l1;
private JButton btna,btnb,btnc,btnd,btne,btnf,btng,btnh,btni,btnj,btnk,btnl,btnm,btnn,btno,btnp,btnq,btnr,btns,btnt,btnu,btnv,btnw,btnx,btny,btnz;
private ArrayList alist;


public Liste() {

try
{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("com.mysql.jdbc.Driver found");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/active","root","");
System.out.println("Connexion Ok");


// Read data from a table
String sql = "SELECT * FROM ajoututilisateur";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();

// Get column names
for (int i = 1; i <= columns; i++)
{
columnNames.addElement( md.getColumnName(i) );
}

// Get row data
while (rs.next())
{
Vector row = new Vector(columns);
for (int i = 1; i <= columns; i++)
{
row.addElement(rs.getObject(i));
}
data.addElement(row);
}
rs.close();
stmt.close();
}


catch(Exception cnfe)
{
System.out.println("Error:"+cnfe.getMessage());
}

TableModel model = new DefaultTableModel (data,columnNames)
{
public Class getColumnClass(int columnNames) {
Class returnValue;
if ((columnNames >= 0) && (columnNames < getColumnCount())) {
returnValue = getValueAt(0, columnNames).getClass();
} else {
returnValue = Object.class;
}
return returnValue;
}
};
table = new JTable (model) ;
sorter = new TableRowSorter<TableModel>(model) ;
JScrollPane scrollPane = new JScrollPane((table));
table.setRowSorter (sorter) ;
getContentPane().setLayout(new GridLayout(2,1));
getContentPane().add(scrollPane);
JPanel form = new JPanel () ;
JPanel form1 = new JPanel () ;
l1=new JLabel("Recherche :");
form.add (l1) ;
btna=new JButton("A");
// btna.getD
btnb=new JButton("B");
btnc=new JButton("C");
btnd=new JButton("D");
btne=new JButton("E");
btnf=new JButton("F");
btng=new JButton("G");
btnh=new JButton("H");
btni=new JButton("I");
btnj=new JButton("J");
btnk=new JButton("K");
btnl=new JButton("L");
btnm=new JButton("M");
btnn=new JButton("N");
btno=new JButton("O");
btnp=new JButton("P");
btnq=new JButton("Q");
btnr=new JButton("R");
btns=new JButton("S");
btnt=new JButton("T");
btnu=new JButton("U");
btnv=new JButton("V");
btnw=new JButton("W");
btnx=new JButton("X");
btny=new JButton("Y");
btnz=new JButton("Z");

filtertxt = new JTextField (25) ;
filtertxt.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent e)
{
newFilter();
}
public void insertUpdate(DocumentEvent e)
{
table.clearSelection();
newFilter();
}
public void removeUpdate(DocumentEvent e)
{
newFilter();
}
});



form.add (filtertxt) ;
form.add(form1);
getContentPane () .add (form) ;
form1.add(btna);
form1.add(btnb);
form1.add(btnc);
form1.add(btnd);
form1.add(btne);
form1.add(btnf);
form1.add(btng);
form1.add(btnh);
form1.add(btni);
form1.add(btnj);
form1.add(btnk);
form1.add(btnl);
form1.add(btnm);
form1.add(btnn);
form1.add(btno);
form1.add(btnp);
form1.add(btnq);
form1.add(btnr);
form1.add(btns);
form1.add(btnt);
form1.add(btnu);
form1.add(btnv);
form1.add(btnw);
form1.add(btnx);
form1.add(btny);
form1.add(btnz);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getSelectionModel().addListSelectionListener(new ListeListener());

}

private void newFilter()
{
RowFilter<TableModel , Integer> rf = null;
//declare a row filter for your table model
try
{
rf = RowFilter.regexFilter("^" + filtertxt.getText());
//initialize with a regular expression
}
catch (java.util.regex.PatternSyntaxException e)
{
return;
}
sorter.setRowFilter(rf);
}


public class ListeListener implements ListSelectionListener
{
public void valueChanged(ListSelectionEvent e)
{
if(!e.getValueIsAdjusting())
{
int num=table.getSelectedRow() ;
if (num>=0)
{
String nom = table.getValueAt(num, 0).toString();
String nom1 = table.getValueAt(num, 1).toString();
String nom2 = table.getValueAt(num, 2).toString();
String nom3 = table.getValueAt(num, 3).toString();
String nom4 = table.getValueAt(num, 4).toString();
String nom5 = table.getValueAt(num, 5).toString();
String nom6 = table.getValueAt(num, 6).toString();
String nom7 = table.getValueAt(num, 7).toString();
alist=new ArrayList<String>();
alist.add(nom);
alist.add(nom1);
alist.add(nom2);
alist.add(nom3);
alist.add(nom4);
alist.add(nom5);
alist.add(nom6);
alist.add(nom7);


InfosPersonne a= new InfosPersonne ();
a.setData(alist);
a.setVisible(true);
a.setSize(495,570);
}
}
}
}

public static void main(String[] args) {
Liste li = new Liste();
li.setVisible(true);
li.setSize(650,250);
}

}
[code]

10 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 févr. 2012 à 15:06
Bonjour,

Tu as plusieurs solutions pour faire cela :

- Solution 1 : une sélection à partir de la base de données.
Tu récupères la lettre qui est cliquée et tu créé une requête SELECT qui te permet de sélectionner uniquement les nom qui commencent par cette lettre :
"SELECT * FROM contacts WHERE nom LIKE '"lettre"%'";

- Solution 2 : une sélection sur l'arrayList.
Tu parcours tout les éléments de l'arrayList pour ne retenir que ceux dont la première lettre est la lettre que tu as choisis.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 févr. 2012 à 15:08
- Si tu as peu de noms dans ta base alors, il vaut mieux filtrer les résultats sur l'arrayList, l'exécution sera plus rapide

- Si tu as beaucoup de noms dans ta base alors, pour ne pas surcharger la mémoire vive, il vaut mieux faire une nouvelle requête sur la base à chaque fois.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 févr. 2012 à 15:13
Et tu peux un peu améliorer ton code en utilisant ce genre d'astuces :

String lettres = "abcdefghijklmnopqrstuvwxyz";
for(int i=0; i<lettres.length; i++){
JButton b = new JButton(lettres.charAt(i)+"");
b.addActionListener(new ListenerLettres(lettres.charAt(i));
}

public class ListenerLettres implements ActionListener {


private char lettre;

public ListenerLettres(char lettre){
this.lettre=lettre;
}

public void actionPerformed(ActionEvent evt){
// TODO : Ton traitement
}

}


Je ne sais pas si tu vois ce que je veux dire...
0
Recay2 Messages postés 26 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 29 juin 2012
14 févr. 2012 à 16:16
Mais la j'ai des bouton par exemple a chaque fois que je clique sur le bouton A j'ai toute la liste qui commence leur prénom par A.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Recay2 Messages postés 26 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 29 juin 2012
14 févr. 2012 à 16:19
J'ai beaucoup de nom aussi
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 févr. 2012 à 16:25
Je ne comprend pas ce que tu essayes de me dire désolé. Peux tu être plus précis ?
0
Recay2 Messages postés 26 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 29 juin 2012
14 févr. 2012 à 16:40
J'ai beaucoup de nom et je veux à partir de la liste quand je clique par exemple sur le bouton A tout les prénoms qui commence par A s'affiche dans une autre fenêtre. Merci
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 févr. 2012 à 18:37
Ok, j'ai compris ce que tu voulais faire, quel est ton problème ?
0
Recay2 Messages postés 26 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 29 juin 2012
14 févr. 2012 à 18:48
Mon probleme je n'arrive pas à le faire, j'ai essayé de créer un actionlistener pour le bouton A mais il m'affiche toujours la liste sans qu'il filtre et me donne tout les prénom qui commence que par A .Merci

[code]

package client;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;


public class Liste extends JFrame {

Vector columnNames = new Vector();
Vector data = new Vector();
static ResultSet rs;
static Connection conn;
static Statement stat;
private JTable table;
private TableRowSorter<TableModel> sorter;
private JFrame frame;
private JTextField filtertxt;
private JLabel l1;
private JButton btna,btnb,btnc,btnd,btne,btnf,btng,btnh,btni,btnj,btnk,btnl,btnm,btnn,btno,btnp,btnq,btnr,btns,btnt,btnu,btnv,btnw,btnx,btny,btnz;
private ArrayList alist;
private String lettres = "abcdefghijklmnopqrstuvwxyz";

public Liste() {

try
{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("com.mysql.jdbc.Driver found");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/active","root","");
System.out.println("Connexion Ok");


// Read data from a table
String sql = "SELECT * FROM ajoututilisateur";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();

// Get column names
for (int i = 1; i <= columns; i++)
{
columnNames.addElement( md.getColumnName(i) );
}

// Get row data
while (rs.next())
{
Vector row = new Vector(columns);
for (int i = 1; i <= columns; i++)
{
row.addElement(rs.getObject(i));
}
data.addElement(row);
}
rs.close();
stmt.close();
}


catch(Exception cnfe)
{
System.out.println("Error:"+cnfe.getMessage());
}

TableModel model = new DefaultTableModel (data,columnNames)
{
public Class getColumnClass(int columnNames) {
Class returnValue;
if ((columnNames >= 0) && (columnNames < getColumnCount())) {
returnValue = getValueAt(0, columnNames).getClass();
} else {
returnValue = Object.class;
}
return returnValue;
}
};
table = new JTable (model) ;
sorter = new TableRowSorter<TableModel>(model) ;
JScrollPane scrollPane = new JScrollPane((table));
table.setRowSorter (sorter) ;
getContentPane().setLayout(new GridLayout(2,1));
getContentPane().add(scrollPane);
JPanel form = new JPanel () ;
JPanel form1 = new JPanel () ;
l1=new JLabel("Recherche :");
form.add (l1) ;

// ------------Bouton actionlistener----------

btna=new JButton("A");
btna.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

if((JButton)e.getSource()==btna)
{
Liste l=new Liste();
l.setVisible(true);
l.setSize(650,250);

}
}
});
btnb=new JButton("B");
btnc=new JButton("C");
btnd=new JButton("D");
btne=new JButton("E");
btnf=new JButton("F");
btng=new JButton("G");
btnh=new JButton("H");
btni=new JButton("I");
btnj=new JButton("J");
btnk=new JButton("K");
btnl=new JButton("L");
btnm=new JButton("M");
btnn=new JButton("N");
btno=new JButton("O");
btnp=new JButton("P");
btnq=new JButton("Q");
btnr=new JButton("R");
btns=new JButton("S");
btnt=new JButton("T");
btnu=new JButton("U");
btnv=new JButton("V");
btnw=new JButton("W");
btnx=new JButton("X");
btny=new JButton("Y");
btnz=new JButton("Z");

filtertxt = new JTextField (25) ;
filtertxt.getDocument().addDocumentListener(new DocumentListener()
{
public void changedUpdate(DocumentEvent e)
{
newFilter();
}
public void insertUpdate(DocumentEvent e)
{
table.clearSelection();
newFilter();
}
public void removeUpdate(DocumentEvent e)
{
newFilter();
}
});



form.add (filtertxt) ;
//form.add(form1);
GridLayout grd=new GridLayout(3,2);
getContentPane().setLayout(grd);
getContentPane().add(form);
getContentPane().add(form1);
form1.add(btna);
form1.add(btnb);
form1.add(btnc);
form1.add(btnd);
form1.add(btne);
form1.add(btnf);
form1.add(btng);
form1.add(btnh);
form1.add(btni);
form1.add(btnj);
form1.add(btnk);
form1.add(btnl);
form1.add(btnm);
form1.add(btnn);
form1.add(btno);
form1.add(btnp);
form1.add(btnq);
form1.add(btnr);
form1.add(btns);
form1.add(btnt);
form1.add(btnu);
form1.add(btnv);
form1.add(btnw);
form1.add(btnx);
form1.add(btny);
form1.add(btnz);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
table.getSelectionModel().addListSelectionListener(new ListeListener());

}


private void newFilter()
{
RowFilter<TableModel , Integer> rf = null;
//declare a row filter for your table model
try
{
rf = RowFilter.regexFilter("^" + filtertxt.getText());
//initialize with a regular expression
}
catch (java.util.regex.PatternSyntaxException e)
{
return;
}
sorter.setRowFilter(rf);
}


public class ListeListener implements ListSelectionListener
{
public void valueChanged(ListSelectionEvent e)
{
if(!e.getValueIsAdjusting())
{
int num=table.getSelectedRow() ;
if (num>=0)
{
String nom = table.getValueAt(num, 0).toString();
String nom1 = table.getValueAt(num, 1).toString();
String nom2 = table.getValueAt(num, 2).toString();
String nom3 = table.getValueAt(num, 3).toString();
String nom4 = table.getValueAt(num, 4).toString();
String nom5 = table.getValueAt(num, 5).toString();
String nom6 = table.getValueAt(num, 6).toString();
String nom7 = table.getValueAt(num, 7).toString();
alist=new ArrayList<String>();
alist.add(nom);
alist.add(nom1);
alist.add(nom2);
alist.add(nom3);
alist.add(nom4);
alist.add(nom5);
alist.add(nom6);
alist.add(nom7);


InfosPersonne a= new InfosPersonne ();
a.setData(alist);
a.setVisible(true);
a.setSize(495,570);
}
}
}
}


public static void main(String[] args) {
Liste li = new Liste();
li.setVisible(true);
li.setSize(650,250);
}

}

[code]
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
15 févr. 2012 à 08:26
Dans ton listener, tu ne fais rien du tout. Normal que ca ne marche pas...

Je t'ai donné quelques conseils de conception, tu devrais peut être les suivre...
0
Rejoignez-nous