Filtrer un jtable en java

fazghol Messages postés 4 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 18 mai 2012 - 6 déc. 2010 à 12:10
fazghol Messages postés 4 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 18 mai 2012 - 9 déc. 2010 à 19:23
voici le code source de récupération de donnés d'une bd oracle dans une jtable java, l’exécution de cette dernière est effectuer mais lorsque je veux filtrer les lignes (recherche) dans une zone texte a travers une action sur un btn il m'affiche une erreur au niveau de sorter : aider moi svp de trouver une solution et merci bien :)
import java.awt.BorderLayout;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultRowSorter;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
import java.awt.Rectangle;
import java.awt.Dimension;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import javax.swing.JLabel;
import java.awt.*;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.lang.Exception;
import javax.swing.*;
import java.sql.*;
import java.awt.Font;
import javax.swing.SwingConstants;
import oracle.jdbc.driver.OracleDriver.*;
import oracle.jdbc.*;
import oracle.jdbc.driver.*;
import javax.swing.*;
import java.awt.Color;
import javax.swing.BorderFactory;
import java.awt.Rectangle;

public class jtable extends JFrame {

private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JTable jTable = null;

/**
* This is the default constructor
*/

public jtable() {
super();
initialize();
}

/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(755, 308);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}

/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jLabel2 = new JLabel();
jLabel2.setBounds(new Rectangle(548, 92, 154, 30));
jLabel2.setBackground(new Color(94, 238, 238));
jLabel2.setForeground(new Color(51, 51, 167));
jLabel2.setText("Matrecule :");
jLabel1 = new JLabel();
jLabel1.setBounds(new Rectangle(314, 18, 208, 19));
jLabel1.setText("Tonnage");
jLabel = new JLabel();
jLabel.setBounds(new Rectangle(75, 17, 242, 20));
jLabel.setText("Matrécule Voiture");
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJTable(), null);
jContentPane.add(jLabel, null);
jContentPane.add(jLabel1, null);
jContentPane.add(jLabel2, null);
jContentPane.add(getJTextField(), null);
jContentPane.add(getJButton(), null);
}
return jContentPane;
}

/**
* This method initializes jTable
*
* @return javax.swing.JTable
*/
public ResultSet resultats2;
private JLabel jLabel = null;
private JLabel jLabel1 = null;
private JLabel jLabel2 = null;
private JTextField jTextField = null;
private JButton jButton = null;
private JTable getJTable() {
if (jTable == null) {
jTable = new JTable();
jTable.setBounds(new Rectangle(73, 37, 450, 200));
jTable.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusGained(java.awt.event.FocusEvent e) {
System.out.println("focusGained()"); // TODO Auto-generated Event stub focusGained()
Connection con = null;
try {
DefaultTableModel md = new DefaultTableModel();

md.setColumnIdentifiers(new String []{"immat","tonnage"});
JTable table = new JTable(md);
final TableRowSorter<TableModel> sorter;
sorter = new TableRowSorter<TableModel>(md);
table.setRowSorter(sorter);




// Crée un objet DataSource
oracle.jdbc.pool.OracleDataSource ds
= new oracle.jdbc.pool.OracleDataSource();
ds.setDriverType("thin");
ds.setServerName("localhost");
ds.setPortNumber(1521);//port d'écoute
ds.setDatabaseName("XE"); // Oracle SID
ds.setUser("mahdi");//votre nom d'utilisateur
ds.setPassword("mahdi");//votre mot de passe

con = ds.getConnection();

DatabaseMetaData meta = con.getMetaData();
System.out.println("Server name: "
+ meta.getDatabaseProductName());
System.out.println("Server version: "
+ meta.getDatabaseProductVersion());


System.out.println("Connection URL: "+ds.getURL());
String s="select * from vehicule ";
java.sql.PreparedStatement st=con.prepareStatement(s);
resultats2 =st.executeQuery();
try {

ResultSetMetaData rsmd = resultats2.getMetaData();
int nbCols = rsmd.getColumnCount();


boolean encore = resultats2.next();
while (encore) {

md.addRow(new Object[]{ resultats2.getObject("immat"), resultats2.getObject("tonnage")});
encore = resultats2.next();
}
jTable.setModel(md);

resultats2.close();
}
catch (SQLException e2) {
System.out.println(e2.getMessage());
}
con.close();
} catch (Exception s) {
System.err.println("Exception: "+s.getMessage());
s.printStackTrace();
}



// TODO Auto-generated Event stub keyTyped()
}
});
}
return jTable;
}

/**
* This method initializes jTextField
*
* @return javax.swing.JTextField
*/
private JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setBounds(new Rectangle(548, 122, 156, 28));
}
return jTextField;
}

/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/

private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(548, 150, 156, 25));
jButton.setText("filtrer");

jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
String expr = jTextField.getText();
//DefaultTableModel md = new DefaultTableModel();


sorter.setRowFilter(RowFilter.regexFilter(expr));
sorter.setSortKeys(null);

}

});
}
return jButton;
}


}

2 réponses

amundain Messages postés 110 Date d'inscription mercredi 28 mars 2007 Statut Membre Dernière intervention 28 août 2012 1
7 déc. 2010 à 15:23
Salut,

1/ Définis ta JTable comme 'private' en début de classe.
2/ Mets la définition de ton modèle au niveau de la récupération du ResultSet
try {

ResultSetMetaData rsmd = resultats2.getMetaData();
int nbCols = rsmd.getColumnCount();
boolean encore = resultats2.next();
DefaultTableModel md = new DefaultTableModel();
md.setColumnIdentifiers(new String[] { "immat", "tonnage" });
while (encore) {
md.addRow(new Object[] { resultats2.getObject("de_perid"), resultats2.getObject("de_CentreTerritorialID") });
encore = resultats2.next();
}

sorter = new TableRowSorter<TableModel>(md);
jTable.setRowSorter(sorter);
jTable.setModel(md);
resultats2.close();
} catch (SQLException e2) {
System.out.println(e2.getMessage());
}

3/ Pour le bouton :
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
String expr = jTextField.getText();
sorter.setRowFilter(RowFilter.regexFilter(expr));
}
});

4/ Ca marche comme un charme !

A +,


amundain

Java bien,merci.
0
fazghol Messages postés 4 Date d'inscription mardi 22 décembre 2009 Statut Membre Dernière intervention 18 mai 2012
9 déc. 2010 à 19:23
bsr; merci bien amigo exactement,ca marche comme prévu
0
Rejoignez-nous