[Java] Probleme avec JTable

lilyy59 Messages postés 22 Date d'inscription lundi 1 novembre 2010 Statut Membre Dernière intervention 19 mars 2012 - 15 mars 2012 à 21:03
lilyy59 Messages postés 22 Date d'inscription lundi 1 novembre 2010 Statut Membre Dernière intervention 19 mars 2012 - 19 mars 2012 à 16:39
Bonjour,
Lorsque je veux remplis un tableau a partir d'une liste j'ai l'erreur :

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.JTable.prepareRenderer(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JViewport.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.access$700(Unknown Source)
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)



Je ne comprend pas je n'ai pas de renderer dans mon code.
	public DomaineIHM(final Magasin magasin) throws FileNotFoundException, IOException {
setBounds(100, 100, 620, 499);
getContentPane().setLayout(null);

JPanel panel = new JPanel();
panel.setBorder(new LineBorder(new Color(0, 0, 0)));
panel.setBounds(10, 11, 584, 69);
getContentPane().add(panel);
panel.setLayout(null);

JLabel lblNouveauDomaine = new JLabel("Nouveau domaine");
lblNouveauDomaine.setBounds(10, 25, 132, 14);
panel.add(lblNouveauDomaine);

txtnom = new JTextField();
txtnom.setBounds(116, 22, 171, 20);
panel.add(txtnom);
txtnom.setColumns(10);

comboBox = new JComboBox();
comboBox.setBounds(10, 110, 175, 20);
getContentPane().add(comboBox);

for(Domaine d : magasin.getLesDomaines()){
comboBox.addItem(d.getLibelle());
}
comboBox.setSelectedIndex(0);
JButton btnAjouter = new JButton("Ajouter");
btnAjouter.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String nom = txtnom.getText();
txtnom.setText(" ");
Domaine dom = new Domaine(nom);
magasin.getLesDomaines().add(dom);
comboBox.addItem(nom);


try {
b.ajouterDomaine(dom);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
btnAjouter.setBounds(438, 21, 89, 23);
panel.add(btnAjouter);



JButton btnSupprimer = new JButton("Supprimer");
btnSupprimer.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int rep = JOptionPane.showConfirmDialog(null,"Voulez vous vraiment supprimer ce domaine? Attention cela entrainera la suppression des objets associés", "Suppression d'un domaine", JOptionPane.YES_NO_OPTION);
if(rep == JOptionPane.YES_OPTION){
System.out.println(comboBox.getSelectedIndex());
Domaine d = magasin.getLesDomaines().get(comboBox.getSelectedIndex());
magasin.getLesDomaines().remove(d);
try {
b.supprimerDomaine(d);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
List<Objet> temp = new LinkedList<Objet>();
for(Objet o : magasin.getLesObjets()){
if(o.getNomDom().equals(d.getLibelle())){
temp.add(o);
}
}
for(Objet t : temp){
magasin.getLesObjets().remove(t);
}

comboBox.removeAllItems();
for(Domaine d1 : magasin.getLesDomaines()){
comboBox.addItem(d1.getLibelle());
}

}
}
});
btnSupprimer.setBounds(218, 109, 89, 23);
getContentPane().add(btnSupprimer);

JPanel panel_1 = new JPanel();
panel_1.setBounds(10, 204, 584, 224);
getContentPane().add(panel_1);
panel_1.setLayout(null);

JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(0, 0, 584, 224);
panel_1.add(scrollPane);

table = new JTable();
scrollPane.setViewportView(table);

JLabel lblAjouter = new JLabel("Ajouter ");
lblAjouter.setBounds(10, 141, 46, 14);
getContentPane().add(lblAjouter);

textField = new JTextField();
textField.setBounds(84, 166, 86, 20);
getContentPane().add(textField);
textField.setColumns(10);

JLabel lblNom = new JLabel("Nom");
lblNom.setBounds(10, 169, 46, 14);
getContentPane().add(lblNom);

JLabel lblPrix = new JLabel("Prix");
lblPrix.setBounds(206, 169, 46, 14);
getContentPane().add(lblPrix);

textField_1 = new JTextField();
textField_1.setBounds(274, 166, 86, 20);
getContentPane().add(textField_1);
textField_1.setColumns(10);

JButton btnAjouter_1 = new JButton("Ajouter");
btnAjouter_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String libel = textField.getText();
float prix = Float.parseFloat(textField_1.getText()) ;
System.out.println( magasin.getLesDomaines().get(comboBox.getSelectedIndex()).getLibelle());
Objet ob = new Objet(libel, prix, magasin.getLesDomaines().get(comboBox.getSelectedIndex()).getLibelle() );
domselect = magasin.getLesDomaines().get(comboBox.getSelectedIndex());
try {
b.ajouterObjet(ob);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//				remplirTableauForm(ob);
}

});
btnAjouter_1.setBounds(388, 165, 89, 23);
getContentPane().add(btnAjouter_1);

DefaultTableModel model=(DefaultTableModel)table.getModel();
table.setModel(new DefaultTableModel(
new Object[][] {
},
new String[] {
"Nom", "prix"
}
) {
Class[] columnTypes = new Class[] {
String.class, float.class
};
public Class getColumnClass(int columnIndex) {
return columnTypes[columnIndex];
}
});
table.getColumnModel().getColumn(0).setResizable(false);
table.getColumnModel().getColumn(0).setPreferredWidth(76);



remplirTableau(magasin);
System.out.println("héhé");
setVisible(true);

}
private void remplirTableau(Magasin magasin) {
// TODO Auto-generated method stub

int p=0;
for(Objet o : magasin.getLesObjets()){
if(o.getNomDom().equals(magasin.getLesDomaines().get(comboBox.getSelectedIndex()).getLibelle())){
p++;
}
}
DefaultTableModel model=(DefaultTableModel)table.getModel();
model.setRowCount(p);
int l=0;
for(Objet o : magasin.getLesObjets()){
if(o.getNomDom().equals(magasin.getLesDomaines().get(comboBox.getSelectedIndex()).getLibelle())){
if(l<=p-1){
model.setValueAt(o.getLibelle(), l, 0);
model.setValueAt(o.getPrix(), l, 1);
l++;
}

}
}
}



}


merci

4 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 mars 2012 à 08:26
Bonjour,

Si tu as une JTable, tu as forcément un Renderer même si tu ne l'utilises pas explicitement dans ton code.

Déjà, enlèves ca :
catch (ClassNotFoundException e1) {

Plutot que de faire un table.setModel, je te conseil de construire directement la table avec le model en paramètre.

Je n'ai pas lu tout ton code, les catch des RuntimeException peuvent fausser l'erreur, essayes sans et dis moi si ca change quelque chose. En tout cas, si tu veux récupérer les traces de tes erreurs, ne catch pas les RuntimeException.

Un petit exemple d'ajout de données à une JTable, ca peut te servir : http://www.javafr.com/codes/REDIMENSIONNER-JTABLE_53881.aspx
0
lilyy59 Messages postés 22 Date d'inscription lundi 1 novembre 2010 Statut Membre Dernière intervention 19 mars 2012
17 mars 2012 à 21:11
J'ai toujours le même probleme ... Mes problèmes ont commencé quand j'ai voulu mettre du renderer dans ma table. J'ai voulu les enlever pour voir si ça marchait sans .
0
lilyy59 Messages postés 22 Date d'inscription lundi 1 novembre 2010 Statut Membre Dernière intervention 19 mars 2012
19 mars 2012 à 16:37
Le probleme vient de :
	private void remplirTableau(Magasin magasin) {
// TODO Auto-generated method stub
System.out.println("eee");
List<Objet> lesObjetsSel = null;
try {
lesObjetsSel = b.ObjetParDomaine(magasin.getLesDomaines().get(comboBox.getSelectedIndex()).getId());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

DefaultTableModel model=(DefaultTableModel)table.getModel();
model.setRowCount(lesObjetsSel.size());
for(Objet o : lesObjetsSel){
model.setValueAt(o.getLibelle(), model.getRowCount()-1, 0);
model.setValueAt(o.getPrix(), model.getRowCount()-1, 1);
}
}


puisque quand je n'appelle pas cette fonction je n'ai pas de problème à l'ouverture. J'ai verifié il y a bien quelques choses quand lesObjetsSel
0
lilyy59 Messages postés 22 Date d'inscription lundi 1 novembre 2010 Statut Membre Dernière intervention 19 mars 2012
19 mars 2012 à 16:39
Je n'ai pas de problème quand ma bd est vide.
0
Rejoignez-nous