Vous êtes sur la page 1sur 5

ENI Dr RV p1

UTILISATION DE LA CLASSE JTABLE EXEMPLE 1: Création d’une table simple :

JTable affiche des données dans un tableau Object[][] donnees = {


TableModel régit la gestion des données {"Swing", "Astral", "standard", Color.red,
On peut fournir les données dans un tableau Boolean.TRUE},
bidimensionnel d’objets : Object[][]et utiliser le {"Swing", "Mistral", "standard", Color.yellow,
DefaultTableModel,mais il vaut mieux étendre Boolean.FALSE},
AbstractTableModel. {"Gin", "Oasis", "standard", Color.blue,
La sélection est régi par une modèle de sélection Boolean.FALSE},
De plus, il y a un modèle de colonnes. {"Gin", "boomerang", "compétition",
Un tableau est entouré d’ascenseurs, en général Color.green, Boolean.TRUE},
{"Advance", "Omega", "performance",
Construire une table Color.cyan, Boolean.TRUE}, } ;

Les constructeurs sont String[] titreColonnes = { "modèle", "marque",


JTable() modèles par défaut pour les trois "homologation", "couleur", "vérifié ?"};
modèles
JTable(int numRows, int numColumns) avec Jtable jTable1 = new JTable(donnees,
autant de cellules vides titreColonnes);
JTable(Object[][] rowData, Object[]
columnNames) avec les valeurs des cellules de JScrollPane query ScrollPane1 = new
rowData et noms de colonnes columnNames. JScrollPane(jTable1);
JTable(TableModel dm) avec le modèle de add (ScrollPane1 );
données dm, les autres par défaut.
JTable(TableModel dm, TableColumnModel cm) Permet d’afficher la table suivante
avec modèle de données et modèle de colonnes
fournis.
JTable(TableModel dm, TableColumnModel cm,
ListSelectionModel sm) Les trois modèles sont
fournis.
JTable(Vector rowData, Vector columnNames)
ici, les données sont fournies par colonne.

Modèles de table
• Les cellules sont toutes éditables.
Les données sont accessibles par un modèle. Ils
peuvent être stockés ou calculés, de façon
• Les types de données sont traités tous de
transparente. façon automatique.
La classe AbstractTableModel implémente les • Les cellules sont remplies avec les données d’un
méthodes d’un modèle de table, qui retournent tableau, ce qui ne pas être approprié.
respectivement le nombre de lignes ,le nombre de
colonnes,l’objet à afficher dans les ligne et Pour éviter ces problèmes, il faut passer par un
colonne indiquées (sa méthode toString est modèle.
utilisée).
Création d’un modèle de table
public int getRowCount()
public int getColumnCount() Pour obtenir la même table que précédemment
public Object getValueAt(int ligne, int colonne) nous pourrions définir la classe :
D’autres méthodes:
public class MonModele extends
public String getColumnName(int col) AbstractTableModel {
Object donnees[][];
String titres[];
boolean isCellEditable(int row, int col) public MonModele(Object donnees[][], String
titres[]) {
public void setValueAt(Object aValue, int this.donnees = donnees; this.titres = titres;
row, int column) // modifier le contenu }
d’une cellule
ENI Dr RV p2

public int getColumnCount() { return Integer.toString(i+j);


return donnees[0].length; }
} }
public Object getValueAt(int parm1, int parm2) { }
return donnees[parm1][parm2];
} Puis écrire :
public int getRowCount() {
return donnees.length; MonModelePascal mmP = new
} MonModelePascal();
public String getColumnName(int col){ JTable jTable3 = new JTable(mmP);
return titres[col];
} On obtiendra alors :
}

Puis écrire :

MonModele mm = new
MonModele(donnees, titreColonnes);
JTable jTable2 = new JTable(mm);
JScrollPane ScrollPane2 = new
JScrollPane(jTable2);
add (ScrollPane2) ;

EXEMPLE 2
Pour obtenir une table contenant le triangle
de Pascal, nous pourrions définir la classe : import javax.swing.*;
import javax.swing.table.*;
public class MonModelePascal extends import javax.swing.event.*;
AbstractTableModel { import java.awt.*;
import java.awt.event.*;
public MonModelePascal() { import java.sql.*;
} import java.io.*;
public int getColumnCount() { import java.util.*;
return 10;
} public class Jtablebd extends JFrame {
public int getRowCount() {
return 10; static Connection con=null;
} static Statement statement = null;
public String getColumnName(int col){ static ResultSet rescli =null;
return ""; static ResultSet rescom =null;
} static ResultSetMetaData metaData;
public Object getValueAt(int parm1, int parm2) { static JTextField zoneSolde,zoneMontant ;
if(parm1==0) static double TotalSolde=0 ;
if( parm2==0) return "1"; else return ""; static double TotalMontant=0 ;
else
if(parm2>parm1) return ""; // DONNEES POUR JTABLE 1
else if (parm2==parm1) return "1";
else public Object[][] cellules1 = {
if (parm2==0) return "1"; { "Mercure", new Double(2440), new Integer(0),
else{ "non"},
int i = Integer.parseInt( { "Vénus", new Double(6052), new Integer(0),
(String)getValueAt(parm1-1, "non"},
parm2-1)); { "Terre", new Double(6378), new Integer(1),
int j = Integer.parseInt( "non"},
(String)getValueAt(parm1-1, { "Mars", new Double(3397), new Integer(2),
parm2)); "non"},
ENI Dr RV p3

{ "Jupiter", new Double(71492), new Integer(16), TableModel model2 = new


"oui"}, AbstractTableModel() {
{ "Saturne", new Double(60268), new Integer(18), // These methods always need to be
"oui"}, implemented.
{ "Uranus", new Double(25559), new Integer(17), public int getColumnCount() { return
"oui"}, columnNames2.length; }
{ "Neptune", new Double(24766), new Integer(8),
"oui"}, public int getRowCount() {
{ "Pluton", new Double(1137), new Integer(1), return rows.size();
"non"} }
};
public Object getValueAt(int row, int col) {
public String[] columnNames1 = Vector rowx =
{ "Planète", "Rayon", "Lunes", "Gazeuse"}; (Vector)rows.elementAt(row);
return rowx.elementAt(col);
static public String[] columnNames2= {} ; }
static Vector rows = new Vector();
// The default implementations of these
public Jtablebd() methods in
{ // AbstractTableModel would work, but we can
super(" Ma Fenêtre JFRAME"); refine them.
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){ public String getColumnName(int column)
try{ {return columnNames2[column];}
rescli.close();statement.close();con.close(); public Class getColumnClass(int col)
} {return getValueAt(0,col).getClass();}
catch(Exception ex) {} public boolean isCellEditable(int row, int col)
System.exit(0); {
} return false ;
}); }

// The Container public void setValueAt(Object aValue, int row, int


Container containera =getContentPane(); column) {
Vector dataRow = (Vector)rows.elementAt(row);
dataRow.setElementAt(aValue, column);
// TABLE1 }
} ; // FIN MODELE
JPanel p1 = new JPanel ();
JTable table1 = new JTable(cellules1, // Instead of making the table display the data as
columnNames1); it would normally with:
table1.setPreferredScrollableViewportSize(ne // JTable tableView = new JTable(dataModel);
w Dimension(500, 200)); // Add a sorter, by using the following three lines
JScrollPane queryScrollPane1 = new instead of the one above.
JScrollPane(table1);
p1.add(queryScrollPane1, TableSorter sorter = new
BorderLayout.CENTER); TableSorter(model2);
JTable table2 = new JTable(sorter);
// PANEL 2 sorter.addMouseListenerToHeaderInTable(ta
JPanel p2 = new JPanel (new BorderLayout()); ble2);
// Create a model of the data.
JTextField queryTextField2 = new table2.setPreferredScrollableViewportSize(new
JTextField("SELECT * FROM COMMANDE ", 45); Dimension(500, 200));
p2.add(queryTextField2, BorderLayout.NORTH ); JScrollPane queryScrollPane2 = new
JScrollPane(table2);
p2.add(queryScrollPane2,
BorderLayout.CENTER);
JTextField zoneMontant = new JTextField(45);
ENI Dr RV p4

zoneMontant.setEditable(false); for(int column = 0; column < numberOfColumns;


zoneMontant.setText("TOTAL MONTANT:"+ column++)
(new Double(TotalMontant)).toString()+" F"); {
p2.add(zoneMontant, BorderLayout.SOUTH ); columnNames2[column] =
metaData.getColumnLabel(column+1);
// The tabbed Pane and the whole container }

JTabbedPane tabbedPane= new JTabbedPane // Get all rows.


();
tabbedPane.addTab("Example1", null, p1, rows = new Vector();
"Simple Window 1"); while (rescom.next()) {
tabbedPane.addTab("Exemple2", null, p2, Vector newRow = new Vector();
"Simple Window 2"); for (int j = 1; j <= columnNames2.length; j++) {
containera.add(tabbedPane, newRow.addElement(rescom.getObject(j));
BorderLayout.CENTER); }
} rows.addElement(newRow);
}
// METTRE LES ENREG. DANS LES CELLULES rescom.close();
}
public static void Ouvrir_Base(){
catch(Exception e1) {
String url ="jdbc:odbc:Essai_Dsn"; System.out.println("ERROR OPEN
int numberOfColumns,i ; COMMANDE...");
try { }
Class.forName("sun.jdbc.odbc.JdbcOdbcDri
ver"); }
con =DriverManager.getConnection(url,"","");
statement = con.createStatement(); public static void main(String args[]){
} Ouvrir_Base();
catch(Exception e2) { Jtablebd f= new Jtablebd();
System.out.println("ERROR OPEN CLIENT ..."); f.pack();
} Dimension screenSize =
Toolkit.getDefaultToolkit().getScreenSize();
// PARCOURS DE LA REQUETE COMMANDE f.setLocation( (screenSize.width-f.getWidth())/2,
try { (screenSize.height-f.getHeight())/2 );
rescom =statement.executeQuery("select f.setVisible(true);
sum(qte*pu) as TotMontant from }
client,commande,produit where }
client.codecli=commande.codecli and
commande.codepro=produit.codepro"); Comment réactualiser l’affichage dans une
JTable
rescom.next();
- mettre à jour le tableau de données ;
TotalMontant=rescom.getDouble("TotMontant") ; - copier éventuellement le tableau dans un
rescom.close(); Vector ;
- utiliser table.setModel(modele) ;
rescom =statement.executeQuery("select - ensuite réactualiser le JScrollPane par la
Client.Codecli,Nom,Adresse,Libelle,Pu,Qte,qte*pu méthode repaint de la forme :
as Montant from client,commande,produit where objJScrollPane.repaint() ;
client.codecli=commande.codecli and
commande.codepro=produit.codepro Order by
nom");

metaData = rescom.getMetaData();
numberOfColumns =
metaData.getColumnCount(); Comment colorier des colonnes de Jtable
columnNames2 = new String[numberOfColumns];
ENI Dr RV p5

JTable table=new JTable(modele)


{
public Component
prepareRenderer(TableCellRenderer renderer, int
row, int column)
{
Component component =
super.prepareRenderer(renderer,row,column);

if(column == 0)
component.setBackgroun
d(Color.yellow);

if(column == 1)

component.setBackground(Color.red);
return component;
}
};
JScrollPane scroll=new JScrollPane(table);

Vous aimerez peut-être aussi