[Java] Probleme avec JTable

Messages postés
22
Date d'inscription
lundi 1 novembre 2010
Statut
Membre
Dernière intervention
19 mars 2012
- - Dernière réponse : 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
Afficher la suite 

4 réponses

Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
250
0
Merci
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
Commenter la réponse de cs_Julien39
Messages postés
22
Date d'inscription
lundi 1 novembre 2010
Statut
Membre
Dernière intervention
19 mars 2012
0
Merci
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 .
Commenter la réponse de lilyy59
Messages postés
22
Date d'inscription
lundi 1 novembre 2010
Statut
Membre
Dernière intervention
19 mars 2012
0
Merci
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
Commenter la réponse de lilyy59
Messages postés
22
Date d'inscription
lundi 1 novembre 2010
Statut
Membre
Dernière intervention
19 mars 2012
0
Merci
Je n'ai pas de problème quand ma bd est vide.
Commenter la réponse de lilyy59