Bonjour à tous,
ça fait une semaine que je suis bloqué sur un point.
Je souhaite lire un fichier XML et mettre les données dans la JTable.
Pour parser le fichier xml j'utilise JDom.
Dès que le fichier xml est modifié (a une ligne en plus) j'aimerai qu'elle soit afficher dans la table.


EDIT :Mon principal problème est de mettre mes datas dans mon modèle.



J'ai repris l'exemple du how to de sun pour les abstracts models.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
package components;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.AbstractTableModel;
import java.awt.Dimension;
import java.awt.GridLayout;
 
public class TableDemo extends JPanel {
    private boolean DEBUG = false;
 
    public TableDemo() {
        super(new GridLayout(1,0));
 
        JTable table = new JTable(new MyTableModel());
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
 
        for(int k = 0; k < 20 ; k++)
        {
        	for(int i =0 ; i <4 ; i++)
        	{
        	table.setValueAt(("Ba"+i+k).toString(), k, i);
        	}
        }
 
 
 
        table.setFillsViewportHeight(true);
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane);
    }
 
    class MyTableModel extends AbstractTableModel {
        private String[] columnNames = {"Nom",
                                        "Date",
                                        "Taille",
                                        "Envoyé"};
        private Object[][] data = {
        		{"Fichier", "20/03/2010", "700Ko", new Boolean(true)},
        		{"Fichier", "20/03/2010", "700Ko", new Boolean(false)}
        };
 
        public int getColumnCount() {
            return columnNames.length;
        }
        public void setData(Object[][] data1){
        data=data1;	
        }
 
        public int getRowCount() {
            return data.length;
        }
 
        public String getColumnName(int col) {
            return columnNames[col];
        }
 
        public Object getValueAt(int row, int col) {
            return data[row][col];
        }
 
        public Class getColumnClass(int c) {
 
            return getValueAt(0, c).getClass();
        }
 
 
        public boolean isCellEditable(int row, int col) {
           return false;           
        }
 
        /*
         * Don't need to implement this method unless your table's
         * data can change.
         */
        public void setValueAt(Object value, int row, int col) {
            if (DEBUG) {
                System.out.println("Setting value at " + row + "," + col
                                   + " to " + value
                                   + " (an instance of "
                                   + value.getClass() + ")");
            }
 
            data[row][col] = value;
            fireTableCellUpdated(row, col);
 
            if (DEBUG) {
                System.out.println("New value of data:");
                printDebugData();
            }
        }
 
        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();
 
            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + data[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }
    }
 
    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("TableDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        //Create and set up the content pane.
        TableDemo newContentPane = new TableDemo();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);
 
        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }
 
    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
 
            	for (UIManager.LookAndFeelInfo laf :
            		UIManager.getInstalledLookAndFeels() ){
            		if ("Nimbus".equals(laf.getName())) {
            		try {
            		UIManager.setLookAndFeel(laf.getClassName());
 
            		} catch (Exception e) {
            		// TODO: handle exception
            		}
 
            		}
            		}
            }
        });
    }
}


Code pour lire le fichier xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
  private Document document;
    private final Element racine;
   SAXBuilder sxb = new SAXBuilder();
        try {
            document = sxb.build(new File("CodesBarres.xml"));
        } catch (Exception e5) {
            e5.printStackTrace();
        }
        racine = document.getRootElement();
        System.out.println("racine " + racine);
        List listfichier = racine.getChildren("fichier");
        System.out.println(listfichier.size());
        Iterator i = listfichier.iterator();
        while (i.hasNext()) {
            Element courant = (Element) i.next();
            Object[] rowData ={
            		courant.getChild("nom").getText(),
            		courant.getChild("DateEnvoi").getText(),
            		courant.getChild("Taille").getText(),
            		new Boolean(true)
            		};
 
            // Ici j'aimerai ajouter une ligne à ma mytablemodel qui hérite de AbstractTableModel
 
 
        }
Je ne sais pas si je me suis bien fait comprendre.
Merci