Une jtable remplie avec du xml

0/5 (4 avis)

Vue 10 144 fois - Téléchargée 1 549 fois

Description

Ce p'tit code source permet de lier un fichier XML et une JTable. Il permet seulement la lecture de fichier xml pour l'instant mais il sera possible d'enregistrer dans quelques jours.

Source / Exemple :


/*

  • JTableXml.java
*
  • Created on 14 octobre 2004, 13:49
  • /
package anemf.lgc.xml; import javax.xml.transform.*; import javax.xml.parsers.*; import javax.xml.transform.sax.*; import org.xml.sax.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*; import org.w3c.dom.*; import java.io.*; import anemf.lgc.basededonnee.*; import anemf.lgc.*; import java.sql.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; import java.awt.*; /** *
  • @author renard
  • /
public class JTableXml extends JTable { Element e; /** Creates a new instance of JTableXml */ public JTableXml(Element elem){ this.e = elem; System.out.println("tototo" + e.getNodeName()); init(); } public void init(){ this.setModel(new AbstractTableModel() { public String getColumnName(int col) { return JTableXml.this.getColumnName(col); } public int getRowCount() { return JTableXml.this.getRowCount(); } public int getColumnCount() {return JTableXml.this.getColumnCount();} public Object getValueAt(int row, int col) { return getValueAt(row, col); } public boolean isCellEditable(int row, int col) { return true; } public void setValueAt(Object value, int row, int col) { JTableXml.this.setValueAt(value, row, col); fireTableCellUpdated(row, col); } }); } public String getColumnName(int col) { for(int i=0; i< e.getChildNodes().getLength(); i++ ){ if(e.getChildNodes().item(i).getNodeType()!= Element.TEXT_NODE){ int p=-1; for(int j = 0 ; j<e.getChildNodes().item(i).getChildNodes().getLength(); j++){ if(e.getChildNodes().item(i).getChildNodes().item(j).getNodeType()!= Element.TEXT_NODE) p++; if(p==col) return e.getChildNodes().item(i).getChildNodes().item(j).getNodeName(); } } } return null; } public int getRowCount() { if(e==null) return 0; int p=0; for(int i=0; i< e.getChildNodes().getLength(); i++ ){ if(e.getChildNodes().item(i).getNodeType()!= Element.TEXT_NODE) p++; } return p; } public int getColumnCount() { int p=0; for(int i=0; i< e.getChildNodes().getLength(); i++ ){ if(e.getChildNodes().item(i).getNodeType()!= Element.TEXT_NODE){ for(int j = 0 ; j<e.getChildNodes().item(i).getChildNodes().getLength(); j++) if(e.getChildNodes().item(i).getChildNodes().item(j).getNodeType()!= Element.TEXT_NODE) p++; return p; } } return 0; } public Object getValueAt(int row, int col) { if(e==null) return null; int pp = -1; for(int i=0; i< e.getChildNodes().getLength(); i++ ){ if(e.getChildNodes().item(i).getNodeType()!= Element.TEXT_NODE){ pp++; if(pp==row){ int p=-1; for(int j = 0 ; j<e.getChildNodes().item(i).getChildNodes().getLength(); j++){ if(e.getChildNodes().item(i).getChildNodes().item(j).getNodeType()!= Element.TEXT_NODE) p++; if(p==col) try{ return e.getChildNodes().item(i).getChildNodes().item(j).getFirstChild().getNodeValue(); } catch(Exception er){er.printStackTrace();}; } } } } return null; } public boolean isCellEditable(int row, int col) { return true; } public void setValueAt(Object value, int row, int col) { } /**
  • @param args the command line arguments
  • /
public static void main(String[] args) { try{ DocumentBuilderFactory DBF = DocumentBuilderFactory.newInstance(); Document doc = DBF.newDocumentBuilder().parse(JTableXml.class.getResourceAsStream("test.xml")); System.out.println(doc.getDocumentElement().getNodeName()); JTableXml jtx = new JTableXml(doc.getDocumentElement()); JFrame f = new JFrame(); f.getContentPane().setLayout(new BorderLayout()); f.getContentPane().add(jtx.getTableHeader(), BorderLayout.NORTH); f.getContentPane().add(jtx, BorderLayout.CENTER); f.pack(); f.show(); }catch(Exception e){ e.printStackTrace(); } // TODO code application logic here } }

Codes Sources

A voir également

Ajouter un commentaire Commentaires
kmeleon1
Messages postés
6
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
13 mars 2009

14 mai 2009 à 16:31
pour eviter l'erreur,
1- modifier cette ligne:
Document doc = DBF.newDocumentBuilder().parse(JTableXml.class.getResourceAsStream("test.xml"));

par :
Document doc = DBF.newDocumentBuilder().parse("test.xml");

2- placer le fichier xml à la racine du projet
agnescol
Messages postés
32
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
13 septembre 2005

27 mai 2005 à 16:21
je suis arrivée à la compiler en utilisant xerces.jar mais lors de l'execution g une erreur :
"Exception in thread "main" java.lang.noClassDefFoundError: JTableXml

je ne comprend pas pkoi peut-tu m'aider?
DhakouaniM
Messages postés
20
Date d'inscription
jeudi 12 août 2004
Statut
Membre
Dernière intervention
30 avril 2005

30 avril 2005 à 04:36
Ah ouim et j'avais oublié... Les lignes suivantes peuvent être supprimées.

package anemf.lgc.xml;
import anemf.lgc.basededonnee.*;
import anemf.lgc.*;
DhakouaniM
Messages postés
20
Date d'inscription
jeudi 12 août 2004
Statut
Membre
Dernière intervention
30 avril 2005

30 avril 2005 à 04:33
La ligne f.show(); est à remplacer par f.setVisible(true); car le methode show a ete abandonnee depuis qq temps.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.