Probleme dans la manipulation des JTABLES

Signaler
Messages postés
106
Date d'inscription
dimanche 19 mars 2006
Statut
Membre
Dernière intervention
17 janvier 2007
-
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
-
Limaiem heykel,
Bonjour, j'ai un gros problemes dans mes jtables, je voudrait savoir comment creer une jtable dynamique de facon que par exemple(l'orsque je clique sur un bouton de mon frame j'effectue un ajout dans ma jtable suivant).
Ainsi je voudrait savoir comment faire pour que tou nouveau enregistrement ajouter dans ma jTable soit placer tout en haut de mon Jtable.
Merci votre aide meserait precieuse

1 réponse

Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut :

Pour comprendre comment manipuler les JTable je vais travailler sur un simple exemple illustratif :

Supposons qu'on a une table Tab_Client contenant ces champs :
1. ID_Client
2. Nom_Client

On se propose de construire une interface Swing permettant d'afficher les 5 premiers clients par ordre décroissant de le leurs identifiants (càd ID_Client).
Cette interface offre la possiblité d'ajouter un nouveau client.

Pour gérer la façon avec laquelles les données sont ajoutées dans la tables vous devez créer une autre classe implémentant la classe abstraite AbstractTableModel.
Je vais vous dire pourquoi faire ça : supposons que vous voulez afficher les données dans la table par ordre croissant ou décroissant ou d'une façon général pour répondre à certains critères que vous exigiez vous devez implémenter les méthodes de cette classe abstraite et ajouter une méthode pour répondre à ce que vous voulez. 

voici le code de notre exemple :
- il créé l'interface de notre application Java
- crée une classe -que je nomme ici tableHandler- implémentant la classe abstraite AbstractTableModel plus une méthode pour afficher nos clients par ordre décroissant.
(Je travaille avec MySQL : je suppose que vous sachiez comme initialiser les pilotes JDBC)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>



import
javax.swing.*; // Pour les composant Swing





import
javax.swing.table.*; // Pour la classe AbstractTableModel





import
java.awt.event.*; // Pour l'action sur le bouton





import
java.sql.*; // Pour les rêquetes SQL






public



class
InterfaceApplication extends JFrame implements ActionListener {




public

InterfaceApplication () {




super

("Table Client");



setBounds (50, 50, 300, 300);



setResizable (false);



setDefaultCloseOperation (EXIT_ON_CLOSE);



getContentPane ().setLayout(null);



clientTable
= new JTable (5, 2);



clientTable
.setBounds(20, 20, 250, 80);



clientTable
.setEnabled (false);



tableHandler
= new TableHandler ();



clientTable
.setModel (tableHandler);



clientIDLabel
= new JLabel("Identifiant du client :");



clientIDLabel
.setLocation(10, 140);



clientIDLabel
.setSize(clientIDLabel.getPreferredSize ());



clientNameLabel
= new JLabel("Nom du client :");



clientNameLabel
.setLocation(10, 170);



clientNameLabel
.setSize(clientNameLabel.getPreferredSize ());



clientIDField
= new JTextField();



clientIDField
.setBounds(140, 140, 140, 20);



clientNameField
= new JTextField();



clientNameField
.setBounds(140, 170, 140, 20);



submitButton
= new JButton("Valider");



submitButton
.setBounds(50, 220, 190, 30);



getContentPane ().add(clientTable);



getContentPane ().add(clientIDLabel);



getContentPane ().add(clientNameLabel);



getContentPane ().add(clientIDField);



getContentPane ().add(clientNameField);



getContentPane ().add(submitButton);



setVisible (true);



}




public



void
actionPerformed (ActionEvent event) {



String name = clientNameField.getText();



String id = clientIDField.getText();



// Ne pas insérer des données vides









if

((id.length () > 0) & (name.length() > 0)) {




try









{



Connection connection;



connection = DriverManager.getConnection("jdbc:mysql://localhost/DataBaseName?user=root&password=guest");



Statement myStatement = connection.createStatement();



myStatement.executeUpdate("INSERT INTO Client VALUES (" + id + ",'" + name + "')");



connection.close();



}




catch

(SQLException e)



{



System.out.println(e);



}



// Faire un mise à jour du contenu du JTable








tableHandler
.updateClientTable();



}



}




public



static


void
main (String [] args) {



InterfaceApplication App = new InterfaceApplication ();




return

;



}




private

JTable clientTable;




private

JLabel clientIDLabel;




private

JLabel clientNameLabel;




private

JTextField clientIDField;




private

JTextField clientNameField;




private

JButton submitButton;




private

TableHandler tableHandler;



// Initialiser les pilotes








// ça se faire dans le main









static

{




try

{



Class.forName ("org.gjt.mm.mysql.Driver");



}




catch

(ClassNotFoundException e) {



System.out.println ("Erreur : " + e.getMessage ());



System.exit (1);



}



}



}




class

TableHandler extends AbstractTableModel {




private

String [][] data = new String [MAX_ROWS][MAX_COLUMNS];




private



static


final


int

MAX_ROWS = 5;




private



static


final


int

MAX_COLUMNS = 2;



// Méthode que j'ajoute pour afficher 5 enregistrement








// Par ordre décroissant









public



void
updateClientTable () {




try

{



// Etablir une connexion à la base de donnée








// DataBase est le nom de la base de données








// root est le mot de passe








// guest est le mot de passe








// Vous devez changer ces paramètres par les votres








Connection connection;



connection = DriverManager.getConnection ("jdbc:mysql://localhost/DataBaseName?user=root&password=guest");



Statement myStatement = connection.createStatement();



ResultSet rs = myStatement.executeQuery("SELECT * FROM Client ORDER BY ID_Client DESC LIMIT " + MAX_ROWS);




int

row = 0;




while

(rs.next())



{



data
[row][0] = rs.getString("ID_Client");



data
[row][1] = rs.getString("Nom_Client");



row++;



}



// Fermer la connection








connection.close();



// Informer la table qu'il y a de nouvelles données








fireTableDataChanged();



}




catch

(SQLException e) {



}



}



// Méthode abstraite de AbstractTableModel









public



int
getColumnCount()



{




return


MAX_COLUMNS;



}



// Méthode abstraite de AbstractTableModel









public



int
getRowCount()



{




return


MAX_ROWS;



}



// Méthode abstraite de AbstractTableModel









 public

Object getValueAt(int row, int column)



{




return


data[row][column];



}



}