Bonjour,
j'ai un probleme dans mon tablemodel : je veux ajouter une methode qui permer d'ajouter automatiquement une colonne dans le jtable lors du clic sur un button mais des erreurs comme d'habitude :
voila ma classe qui herite du abstracttablemodel
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
class MyTableModel extends AbstractTableModel {
 
 
       private String[] columnNames = new String[lignes];
        private Object[][] data = new Object[lignes][colonnes];
        //columnNames = entete ;
        //data = contenu_table ;
        public void affecter(){
        	this.columnNames = entete ;
        	this.data = contenu_table ;
 
        }
 
        public int getColumnCount() {
            return columnNames.length;
        }
 
        public int getRowCount() {
            return data.length;
        }
 
        public String getColumnName(int col) {
            return columnNames[col];
        }
 
        public Object getValueAt(int row, int col) {
           // System.out.println("suis je");
        	return data[row][col];
        }
 
        /*
         * JTable uses this method to determine the default renderer/
         * editor for each cell.  If we didn't implement this method,
         * then the last column would contain text ("true"/"false"),
         * rather than a check box.
         */
        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }
 
        /*
         * Don't need to implement this method unless your table's
         * editable.
         */
        public boolean isCellEditable(int row, int col) {
            //Note that the data/cell address is constant,
            //no matter where the cell appears onscreen.
            if (col < 2) {
                return false;
            } else {
                return true;
            }
        }
 
        /*
         * 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("--------------------------");
        }
        protected Vector dataVector;
 
        protected Vector columnIdentifiers;
        public void addColumn() 
           {
			int nbRow = this.getRowCount(), nbCol = this.getColumnCount();
 
			this.data = new Object[nbRow][nbCol+1];
			Object[][] tmp = new Object[nbRow][nbRow];
			tmp = this.data ;
 
			for(int i = 0 ; i< nbRow ; i++){
				for(int j = 0 ;j<= nbCol ; j++){
					if(j != nbCol){
						this.data[i][j] = tmp[i][j]; 
					}else{
						this.data[i][nbCol] = new Double(0);
					}
 
				}
 
			}
 
			//Cette méthode permet d'avertir le tableau que les données ont été modifiées
			//Ce qui permet une mise à jours complète du tableau
			this.fireTableDataChanged();
 
		}
 
 
 
 
        public void removeRow(int position){
			if(this.getRowCount() ==  tab.getSelectedRows().length){
				this.data = new Object[0][this.getColumnCount()];
			}else{
 
				int indice = 0, indice2 = 0, nbRow = this.getRowCount()-1, nbCol = this.getColumnCount();
				Object temp[][] = new Object[nbRow][nbCol];
 
				for(Object[] value : this.data){
					if(indice != position){
 
						temp[indice2++] = value;
					}
					//System.out.println("Indice = " + indice);
					indice++;
				}
				this.data = temp;
				temp = null;
 
			}
 
			//Cette méthode permet d'avertir le tableau que les données ont été modifiées
			//Ce qui permet une mise à jours complète du tableau
			this.fireTableDataChanged();
		}
		/**
                 * Permet d'ajouter une ligne dans le tableau
                 * @param data
                 */
		public void addRow(Object[] data){
			int indice = 0, nbRow = this.getRowCount(), nbCol = this.getColumnCount();
 
			Object temp[][] = this.data;
			this.data = new Object[nbRow+1][nbCol];
 
			for(Object[] value : temp)
				this.data[indice++] = value;
 
 
			this.data[indice] = data;
			temp = null;
			//Cette méthode permet d'avertir le tableau que les données ont été modifiées
			//Ce qui permet une mise à jours complète du tableau
			this.fireTableDataChanged();
		}
 
 
	}
et voila la methode ou il ya le probleme :
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
public void addColumn() 
           {
			int nbRow = this.getRowCount(), nbCol = this.getColumnCount();
 
			this.data = new Object[nbRow][nbCol+1];
			Object[][] tmp = new Object[nbRow][nbRow];
			tmp = this.data ;
 
			for(int i = 0 ; i< nbRow ; i++){
				for(int j = 0 ;j<= nbCol ; j++){
					if(j != nbCol){
						this.data[i][j] = tmp[i][j]; 
					}else{
						this.data[i][nbCol] = new Double(0);
					}
 
				}
 
			}
 
			//Cette méthode permet d'avertir le tableau que les données ont été modifiées
			//Ce qui permet une mise à jours complète du tableau
			this.fireTableDataChanged();
 
		}
l'exeption geneé c'est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at saisie_tab_donnees$MyTableModel.getColumnClass(saisie_tab_donnees.java:187)
	at javax.swing.JTable.getColumnClass(Unknown Source)
	at javax.swing.JTable.getCellRenderer(Unknown Source)
j'ai pas trouver logiquement de faute dans la methode mais .....
merci pour vous