Bonjour je souhaite faire un table avec un model a init(),puis l'initialiser avec un json ca marchais bien dans un autre code mais en dirait qu'en utilisant 2 modèles j'ai changé quelque chose :s j'obtiens:
Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: -1

Le problème apparait quand je veux ajouter une row en fait.
Le problème semble venir du e.getcolumn();
J'obtient tout le temps -1 comme valeur ,pourquoi?

Voici le code :

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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Iterator;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import netscape.javascript.JSObject;
 
public class SparseTest extends Applet implements ActionListener{
	public  JButton valider;
	public  JFrame frame;
	public  JScrollPane scrollPane,scrollPane2;
	int rowNumber;
	Object data[][];
	//public JSObject win ;
	String[] headers={"premiere valeur",
    "deuxième valeur","troisième valeur"};    
	public  JTable table,table2;
	JPopupMenu popup ;
	JMenuItem inserer;
	DefaultTableModel model,model2;
	String monJavascript = "alert('Applet demaree');";
	StringBuffer buffer;
	int k=0;
	public void init()
	{
 
		Object []rien=new Object[1];
		DefaultTableModel model=new DefaultTableModel();
	    JTable table = new JTable(model);
	    model.addColumn("Col1");
	    scrollPane = new JScrollPane(table);
	    model.addRow(rien);
	    this.add(scrollPane, BorderLayout.CENTER);
 
	    String test2="[{\"c1\":\"10\",\"c2\":\"33\",\"c3\":\"10\"},{\"c1\":\"10\",\"c2\":\"33\",\"c3\":\"15\"}]";
 
	    try {
			set(test2);
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 
	public void get(int row,int column,Object data)
	{	
		JSObject win=JSObject.getWindow(this);
		win = JSObject.getWindow(this);
	    JSObject doc = (JSObject) win.getMember("document");
	    JSObject loc = (JSObject) doc.getMember("location");
	    String s = (String) loc.getMember("href"); // document.location.href
	    String valeur=(String) data;
	    win.call("Chargement",(Object [])new Object[]{row,column,valeur});
	}
 
	public void set(String json) throws JSONException{
		this.remove(scrollPane);
 
		JSONArray c = new JSONArray(json);//création de tableau d'un JSONArray
 
		JSONObject [] temp=new JSONObject[c.length()];//Création d'un tableau de JSON qui peut contenir autant de JSON que JSONArray   
		//On initialise un tableau d'objet qui a pour taille le nombre de JSON dans le JSONArray et le nombre de colonnes
		temp[0]=c.getJSONObject(0);
		Iterator it=temp[0].keys();
 
		  while(it.hasNext()) {
          String key = (String) it.next();
          Object value = temp[0].get(key);
          k++;
	  }  
		data=new Object[c.length()][k];
		String []col=new String[k];
		//pour i variant de 0 au nombre de JSON  présent dans le JSONArray    
		  for(int i=0;i<c.length();i++)
		  {
			  temp[i]=c.getJSONObject(i);//On met les JSON présent dans le JSONArray dans le tableau de JSONObject
 
			  Iterator it1=temp[i].keys();//on crée un objet qui va nous servir comme index de tableau 
			  k=0;//k va nous servir a nous déplacer dans le data
			  while(it1.hasNext()) {//tant qu'il y a des objets dans le JSON  
 
	            String key = (String) it1.next();//on prend la clé
	            Object value = temp[i].get(key);//on prend la valeur
	            data[i][k]=value;//on la met dans le tableau
	            col[k]=key;
	            k++;//on incrémente la colonne du tableau
 
		  }  
			  //puis on passe a l'autre objet JSON 
		  }
 
 
		  model2=new DefaultTableModel();
		  table2=new JTable(model2);
		  for(int i=0;i<col.length;i++)
		  {
			  model2.addColumn(col[i]);
		  }		  
		  for(int i=0;i<c.length();i++)
		  {
		    	model2.insertRow(0, data[i]);
		  }
 
		    scrollPane2 = new JScrollPane(table2);
		    this.add(scrollPane2, BorderLayout.CENTER);
 
		    popup=new JPopupMenu();
		    inserer=new JMenuItem("inserer une ligne");
		    inserer.addActionListener(this);
		    popup.add(inserer);
		    this.add(popup);
 
		    model2.addTableModelListener(new TableModelListener() {
 
				public void tableChanged(TableModelEvent e) {
 
					int row = e.getFirstRow();
					System.out.println("r"+row);
					int column = e.getColumn();
					System.out.println(e.getColumn());
					System.out.println("c"+column);
					TableModel model = (TableModel) e.getSource();
					String columnName = model.getColumnName(column);
					Object data = model.getValueAt(row,column);
					System.out.println("Colone '" + columnName
							+ "', ligne " + row + " : newValue -> \"" + data+"\"");
					//getall,getselected,getrange
					get(row,column,data);
				}
			});
 
	    table2.addMouseListener(new MouseAdapter()
	    {
	    	public void mouseReleased (MouseEvent e)
	    	{
	    		if(e.isPopupTrigger())
	    		{
	    			popup.show(e.getComponent(),e.getX(),e.getY());
	    					// get the coordinates of the mouse click
	    					Point p = e.getPoint();
	    					// get the row index that contains that coordinate
	    					rowNumber = table2.rowAtPoint( p );
	    					// Get the ListSelectionModel of the JTable
	    					ListSelectionModel model = table2.getSelectionModel();
 
	    					// set the selected interval of rows. Using the "rowNumber"
	    					// variable for the beginning and end selects only that one row.
	    					model.setSelectionInterval( rowNumber, rowNumber );
 
	    	}
	    }
	    });
 
	}
 
	public void actionPerformed(ActionEvent eve) {
		// TODO Auto-generated method stub
		Object source =(Object)eve.getSource();
 
		if(source==inserer)
			{
				Object[] vide=new Object[k];
				System.out.println(k);
				for(int i=0;i<k;i++)
				{
					vide[i]="";
					System.out.println(vide[i]);
					System.out.println(rowNumber);
				}
				((DefaultTableModel) table2.getModel()).insertRow(rowNumber,vide);	
			}
	}