JTable (aider moi SVP) please !!

Résolu
Signaler
Messages postés
134
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
31 mai 2010
-
Messages postés
134
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
31 mai 2010
-
Bonsoir


voila j'ai ajouter juste le code, j'ai pas pu ajouter la base de donnée

est ce que qlq un peut m'aider SVP .

- c'est a vous de la créé
et  renomer la base "Base.mdb"
, pour faire le test aprés. ajouter la Base dans le meme repertoir que la classe

une chose a mentioner:

>>crée 3 colocne par ex: N°,Nom,Prenom

>>remplire just le N° dans le 1er enregistrment

>>r
emplire just le N°,Nom dans le 2éme enregistrment

>>r
emplire just le N°,Nom dans le 3éme enregistrment

comme ca vous allez laisser la colone Prenom vides = >> dans ce cas

le probléme se lance.

voila le code :




import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.sql.*;

import java.util.Vector;

import javax.swing.event.TableModelEvent;

import javax.swing.event.TableModelListener;

import javax.swing.table.DefaultTableModel;

import java.sql.Time;

 import java.text.SimpleDateFormat;

 import java.awt.*;

 import java.io.*;

 import java.sql.*;

 import java.util.*;

 import java.util.Date;

 import javax.swing.*;

 import javax.swing.event.*;

 import javax.swing.table.*;

import javax.swing.border.*;

 import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.sql.*;

import java.util.Vector;

import javax.swing.event.TableModelEvent;

import javax.swing.event.TableModelListener;

import javax.swing.table.DefaultTableModel;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.*;

import java.awt.*;

import java.sql.*;

import java.awt.event.*;

import java.awt.print.*;

 import java.util.*;

import java.lang.String;


public class Cadre4 extends JFrame {

  public String NomTable;

  JPanel contentPane;

 private static DefaultTableModel tableModel;

 private  ResultSet rs;

 private  Statement stmt;

 private  ResultSetMetaData md;

 private  int colonnes;

  JPanel jPanel1 = new JPanel();

  JButton jButton1 = new JButton();

  JTable Table = new JTable();

  JScrollPane scTable = new JScrollPane();

  TitledBorder titledBorder1;

  //Construire le cadre

  public Cadre4() {

    enableEvents(AWTEvent.WINDOW_EVENT_MASK);

    //MMMP

    tableModel = new DefaultTableModel();

    Table = new JTable(tableModel) {

        private static final long serialVersionUID = 1L;

               public Class getColumnClass(int column) {

 return getValueAt(0, column).getClass();

                       }

    };

    scTable = new JScrollPane(Table);

    tableModel.addTableModelListener(new TableModelListener() {

          public void tableChanged(TableModelEvent evnt) {

          updateDBRow(evnt);

           }

       });

       try {

           jbInit();

            this.resize(1024,768);

         }

         catch(Exception e) {

           e.printStackTrace();

         }

//MMPPP

  }

  public static void setTableData(Vector d, Vector colname) {


              tableModel.setDataVector(d,colname);

  }

  public Class getColumnClass(int columnIndex) {

              return Boolean.class;

  }

  public void updateDBRow(TableModelEvent evt) {

       Object old = "";

       try {

              if(evt.getType() == TableModelEvent.UPDATE && evt.getColumn() != -1){

              rs.absolute(evt.getFirstRow()+1);

              rs.getObject(evt.getColumn()+1);            rs.updateObject(evt.getColumn()+1,tableModel.getValueAt(evt.getFirstRow(),evt.getColumn()));


              rs.updateRow();

                         }

       } catch (SQLException e) { JOptionPane.showMessageDialog(null,"Erreur"+e,"Warning",JOptionPane.ERROR_MESSAGE);

         //tableModel.setValueAt(old,evt.getFirstRow(),evt.getColumn());

         }

  }

  //Initialiser le composant

  private void jbInit() throws Exception  {

    contentPane = (JPanel) this.getContentPane();

    titledBorder1 = new TitledBorder("");

    contentPane.setLayout(null);

    this.getContentPane().setBackground(SystemColor.scrollbar);

    this.setLocale(java.util.Locale.getDefault());

    this.setSize(new Dimension(986, 836));

    this.setTitle("jj");

    this.addWindowListener(new Cadre4_this_windowAdapter(this));

    jPanel1.setBackground(new Color(157, 185, 235));

    jPanel1.setBorder(BorderFactory.createEtchedBorder());

    jPanel1.setDebugGraphicsOptions(0);

    jPanel1.setBounds(new Rectangle(17, 387, 916, 287));

    jPanel1.setLayout(null);

    jButton1.setBounds(new Rectangle(495, 263, 76, 25));

    jButton1.setOpaque(false);

    jButton1.setText("Actual");

    jButton1.addActionListener(new Cadre4_jButton1_actionAdapter(this));
 
scTable.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
 
scTable.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

    scTable.setBounds(new Rectangle(7, 6, 903, 275));
 
contentPane.setBackground(UIManager.getColor("InternalFrame.inactiveTitleBackground"));

    Table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

    contentPane.add(jPanel1, null);

    jPanel1.add(scTable, null);

    contentPane.add(jButton1, null);

    scTable.getViewport().add(Table, null);

  }

  //Redéfini, ainsi nous pouvons sortir quand la fenêtre est fermée

  protected void processWindowEvent(WindowEvent e) {

    super.processWindowEvent(e);

    if (e.getID() == WindowEvent.WINDOW_CLOSING) {

    }

  }

  void jButton1_actionPerformed(ActionEvent e) {

    try {

                       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

                       Connection conn =
DriverManager.getConnection("jdbc:odbc:DRIVER=Microsoft Access Driver
(*.mdb); DBQ= Base .mdb;");

                        stmt = conn.createStatement();

                        rs = stmt.executeQuery(" SELECT * FROM  Table1 ");

                        md = rs.getMetaData();

                        colonnes = md.getColumnCount();

                        Vector nomColonnes = new Vector();

                        Vector data = new Vector();

                        for (int i = 1; i <= colonnes; i++) {

                             nomColonnes.addElement(md.getColumnName(i));

                        }

                        while (rs.next()){

                              Vector row = new Vector();

                               for (int i = 1; i <= colonnes; i++){


                                    row.addElement(rs.getObject(i));

                               }

                               data.addElement(row);

                         }

                         setTableData(data, nomColonnes);

                      } catch (Exception ex) {

                  //JOptionPane.showMessageDialog(null, "Erreur : " + ex, "Warning", JOptionPane.ERROR_MESSAGE);

                }

  }

  void this_windowClosing(WindowEvent e) {

  }

 public static void main(String args[]) {

     Cadre4 hh = new Cadre4();

     hh.show();

    }

}

class Cadre4_jButton1_actionAdapter implements java.awt.event.ActionListener {

  Cadre4 adaptee;

  Cadre4_jButton1_actionAdapter(Cadre4 adaptee) {

    this.adaptee = adaptee;

  }

  public void actionPerformed(ActionEvent e) {

    adaptee.jButton1_actionPerformed(e);

  }

}


class Cadre4_this_windowAdapter extends java.awt.event.WindowAdapter {

  Cadre4 adaptee;


  Cadre4_this_windowAdapter(Cadre4 adaptee) {

    this.adaptee = adaptee;

  }

  public void windowClosing(WindowEvent e) {

    adaptee.this_windowClosing(e);

  }

}

voila le message d'erreur:


java.lang.NullPointerException

    at test.Cadre4$1.getColumnClass(Cadre4.java:87)

    at javax.swing.JTable.getCellRenderer(JTable.java:3700)

    at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:1148)

    at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1051)

    at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:974)

    at javax.swing.plaf.ComponentUI.update(ComponentUI.java:142)

    at javax.swing.JComponent.paintComponent(JComponent.java:541)

    at javax.swing.JComponent.paint(JComponent.java:808)

    at javax.swing.JComponent.paintChildren(JComponent.java:647)

    at javax.swing.JComponent.paint(JComponent.java:817)

    at javax.swing.JViewport.paint(JViewport.java:722)

    at javax.swing.JComponent.paintChildren(JComponent.java:647)

    at javax.swing.JComponent.paint(JComponent.java:817)

    at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4795)

    at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4748)

    at javax.swing.JComponent._paintImmediately(JComponent.java:4692)

    at javax.swing.JComponent.paintImmediately(JComponent.java:4495)

    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:410)

    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:117)

    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:178)

    at java.awt.EventQueue.dispatchEvent(EventQueue.java:454)

    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)

    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

    at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
le PROBLEME :

Mon probléme c'est au niveau de l'affichage dans JTable lorsque une ou plusieur colones du 1er enregistrement qui va etre afficher a la position 1er est vides.

Merci beaucoup 1000 fois.

3 réponses

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

Quelques remarques:

1. Il y a des attributs qui ne méritent pas d'être des attributs de ta classe. En effet, tu auras dû les définir en tant que des simples variables locales.(scTable,  rs, stmt, md, ...).

2. Dans notre cas, je ne pense pas qu'on va utiliser un renderer spécial donc il vaut mieux supprimer la méthode getColumnClass().

tableModel = new DefaultTableModel();
table = new JTable(tableModel);

3. Je ne vois pas la définition de l'entête de la table. Tu peux comme ça:

tableModel = new DefaultTableModel(
        new Object[][] {}, 
        new Object[] {"Numero", "Nom", "Prenom"}
);
table = new JTable(tableModel);

Utilises le code en rouge au lieu de celui en bleu.
Messages postés
134
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
31 mai 2010
4
You are the best
Ca a marcher merci trés fort
Messages postés
134
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
31 mai 2010
4
Salut
en faite je peux pas utiliser :
tableModel = new DefaultTableModel(
        new Object[][] {}, 
        new Object[] {"Numero", "Nom", "Prenom"}
);
table = new JTable(tableModel);

c'est a dire de spécifier les noms des colone car j'ai un JTable qui depand  d'autre critére (une requet a choix) =>> chaque fois les nombre de colone se change
y a t'il une autre moyen pour le faire ??
MERCI infiniment