En fait, mon but est d'afficher le résultat d'une requête dans un JTable et ensuite, en appuyant sur un bouton de récupérer, dans un premier temps, la valeur d'une colonne de la ligne sélectionnée. Le problème, qui m'a pris toute la nuit, est que quand je teste la référence de ma JTable, et de ma listSelectioModel dans l'ActionListener, elle est nulle, et donc le pgm plante.
J'ai mis en rouge les endroit ou il me rends une valeur nulle...
Merci de votre aide!
Voilà mon code :
package projetjava;
import javax.swing.*;
import javax.swing.table.TableColumn.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.sql.*;
public class VoirClient extends JFrame {
private ConsulterClient parent;
private Accueil parentaccueil;
private Container cont;
private Vector nomcol=new Vector(),lignes=new Vector();
private String requete;
private JPanel pan1;
private MyTableModel model;
private JTable tablecli,tablebis;
private JScrollPane defilant;
private boolean vis = true;
private JButton suppr;
private JButton modifier;
private JButton retour;
private JLabel lab;
private int ind,numcli;
private ListSelectionModel listSelect;
/** Creates a new instance of VoirClient */
public VoirClient(ConsulterClient p, Accueil a) {
super("Client");
parent=p;
parentaccueil=a;
setBounds(100,100,900,500);
cont=getContentPane();
pan1 = new JPanel();
cont.setLayout(new BorderLayout());
try
{
requete="select * from Client;";
nomcol=Generique.getColumns(parentaccueil.getconnexion(),requete);
lignes=Generique.RequeteSQL(parentaccueil.getconnexion(),requete);
}
catch (SQLException re){JOptionPane.showMessageDialog(null,re.getMessage(),"pas d'acces bd",JOptionPane.ERROR_MESSAGE);};
MyTableModel model= new MyTableModel(nomcol,lignes);
JTable tablecli = new JTable(model);
tablecli.getTableHeader().setVisible(vis);
tablecli.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ListSelectionModel listSelect = tablecli.getSelectionModel();
if (VoirClient.this.tablecli==null) System.out.println("pobien1"); if (VoirClient.this.tablebis==null) System.out.println("pobien"); TableColumnModel columnModel = tablecli.getColumnModel();
TableColumn column = columnModel.getColumn(2);
column.setPreferredWidth( 300 );
TableColumn column1 = columnModel.getColumn(6);
column1.setPreferredWidth( 200 );
defilant = new JScrollPane(tablecli);
cont.add(defilant,BorderLayout.CENTER);
lab=new JLabel(" Informations relatives aux clients. Veuillez sélectionner le client sur lequel vous souhaitez faire des modifications.");
cont.add(lab,BorderLayout.NORTH);
suppr = new JButton ("Supprimer le client");
Mongestionnaire sup = new Mongestionnaire();
suppr.addActionListener(sup);
modifier = new JButton ("Modifier les données du client");
Mongestionnaire mod = new Mongestionnaire();
modifier.addActionListener(mod);
retour = new JButton ("<<< Retour");
Mongestionnaire ret = new Mongestionnaire();
retour.addActionListener(ret);
pan1.setLayout(new GridLayout(1,3));
pan1.add(suppr);
pan1.add(modifier);
pan1.add(retour);
cont.add(pan1,BorderLayout.SOUTH);
show();
}
private class Mongestionnaire implements ActionListener
{
public void actionPerformed (ActionEvent e)
{
if (e.getSource()==retour)
{
VoirClient.this.dispose();
}
if (e.getSource()==modifier)
{
}
if (e.getSource()==suppr)
{
if (listSelect == null)
System.out.println("merde"); else{
int row = listSelect.getMinSelectionIndex();
System.out.println(model.getValueAt(row,0));
}
}
}
}
}
package projetjava;
import javax.swing.table.*;
import java.util.*;
/**
*
* @author Maxime
*/
public class MyTableModel extends AbstractTableModel {
Vector nomcol=new Vector();
Vector contenu=new Vector();
/** Creates a new instance of MyTableModel */
public MyTableModel(Vector col,Vector lig) {
contenu=lig;
nomcol=col;
}
public int getColumnCount(){return nomcol.size();}
public int getRowCount() {return contenu.size();}
public String getColumnName (int col) {return (String)nomcol.elementAt(col);}
public Object getValueAt(int row,int col){
Vector vect = (Vector)(contenu.elementAt(row));
return vect.elementAt(col);}
public Class getColumnClass(int c) {
return getValueAt(0,c).getClass();
}
}