Bonjour

j'essais de faire appel à la methode setVAlueAt() afin de faire un firetablecellupdated(), mais le code me renvoie un NullPointeurException sur la ligne d'appel de setVAlueAt(), j'ai déja passer de longue heure à chercher sur le net sans résultat raison pour laquelle je pose directement la question

ma classe qui affiche le tableau

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
 
@SuppressWarnings("serial")
public class AffichageLu extends AbstractTableModel implements TableModelListener {
 
	private final String[] Titres = { "Titre", "Auteur",
			 "Dernier Chap", "Date Dernier Chap", "Dernier Chap Lu", "Date Derniere lecture"};
	private List<Manga> manga = null;
 
 
	public void addManga(Manga mang) {
		int index = ((List<Manga>) manga).size();
		((List<Manga>) manga).add(mang);
		this.fireTableDataChanged();
		fireTableRowsInserted(index, index);
		fireTableRowsInserted(manga.size() -1, manga.size() -1);
	}
 
	/** modification des cellules de la table **/
	public boolean isCellEditable(int row, int col){
		if (col == 4 || col==0) 
		return true;  // Modification des données possible
		else
		return false; // Modification des données impossible
		}
 
	public Manga getMangaAt(int row) {
		if (row >= manga.size())
			return null;
		else
			return manga.get(row);
	}
 
	public AffichageLu(List<Manga> manga) {
 
		this.manga = manga;
	}
 
	@Override
	public int getColumnCount() {
		return Titres.length;
	}
 
	@Override
	public int getRowCount() {
		return manga.size();
	}
 
	@Override
	public String getColumnName(int column) {
		return Titres[column];
	}
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		 System.out.println("AffichageLu : setValueAt -> ***   Test méthode" );
	};
 
 
	@Override
	public Object getValueAt(int row, int column) {
		switch (column) {
		case 0:			
			return manga.get(row).getTitre();
		case 1:
			return manga.get(row).getAuteur();
		case 2:			
				return manga.get(row).getDernierChapitre();
		case 3:
			return manga.get(row).getDateDernierChap();
		case 4:
			return manga.get(row).getDernierChapitreLu();
		case 5:
			return manga.get(row).getDateDerniereLecture();  
		default:
			return "";
		}
	}
 
    public void removeManga(int rowIndex) {
    	manga.remove(rowIndex);
 
        fireTableRowsDeleted(rowIndex, rowIndex);
    }
 
	@Override
	public void tableChanged(TableModelEvent e) {
		 int row = e.getFirstRow();
	        int column = e.getColumn();
 
	        System.out.println("AffichageLu : TableChanged -> ***   Test méthode" );
 
	        TableModel model = (TableModel)e.getSource();
	        String columnName = model.getColumnName(column);
	        Object data = model.getValueAt(row, column);
 
	        System.out.println("AffichageLu : TableChanged -> ***   Test récuperation de donnée de la table -> " + data );
	}
 
}
et la classe qui gère l'afffichage du tableau

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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
 
 
@SuppressWarnings("serial")
public class GestionAffichageLu extends JFrame implements ActionListener,
		TableModelListener {
 
	private JPanel contentPane;
	public JTable table;
	private AffichageLu model;
 
	ConnexionMangaLu con = new ConnexionMangaLu();
	MiseAJourScans majr = new MiseAJourScans();
	FormulaireMiseAJour form;
 
	JComboBox<?> texte = new JComboBox<Object>();
	AutoCompleteSupport<String> support;
 
	private JPopupMenu popupMenu = new JPopupMenu();
	public int selectedRow;
 
	@SuppressWarnings("static-access")
	public GestionAffichageLu() {
 
		this.setTitle("Mangas Lu");
 
		Dimension dimension = java.awt.Toolkit.getDefaultToolkit()
				.getScreenSize();
		int height = (int) dimension.getHeight();
		int width = (int) dimension.getWidth();
		setBounds(-10, 0, width, height);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		// setContentPane(contentPane);
 
		JPanel menu = new JPanel();
 
		con.connection();
		ArrayList<Manga> mangaList = con.getAllMangas();
 
		model = new AffichageLu(mangaList);
 
		table = new JTable();
		// / table.getModel().addTableModelListener(this);
		table.setAutoCreateRowSorter(true); // initialisation du tri
		table.setModel(model);
		getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
 
		final TableRowSorter<AffichageLu> sorter = new TableRowSorter<AffichageLu>(
				model);
		table.setOpaque(true);
		table.setRowSorter(sorter);
 
		texte.setPreferredSize(new Dimension(0, 0));
 
		con.connection();
		ArrayList<String> completion = con.lectureTitre();
 
		// Créer un tableau de même taille que le nombre d'objet de ArrayList
		String tab[] = new String[completion.size()];
 
		// Transforme Le ArrayList en Tableau
		tab = completion.toArray(tab);
 
 
		JMenuItem menuItem3 = new JMenuItem("MAJ derniere lecture");
 
		menuItem3.setActionCommand("");
 
		menuItem3.addActionListener((ActionListener) this);
 
		menuItem3.addActionListener(new MAJDerniereLecture());
 
 
		popupMenu.add(menuItem3);
 
		String[] items = { "Tous", "En Cours", "Terminer" };
		JComboBox<String> combobox = new JComboBox<>(items);
 
 
		GridLayout boutons = new GridLayout(18, 2, 0, 10);
		menu.setLayout(boutons);
		menu.setBorder(BorderFactory.createEmptyBorder(5, 2, 20, 5));
 
		texte.setOpaque(false);
 
		ItemListener listener = new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				if (e.getStateChange() == ItemEvent.SELECTED) {
					String filtrage = combobox.getSelectedItem().toString();
 
					/**
                                         * si selection sur combocox = Tous, on remet le filtrage a
                                         * null sinon filtrage selon le choix
                                         ***/
					if (!filtrage.equals("Tous"))
						sorter.setRowFilter(RowFilter.regexFilter(filtrage));
					else {
						sorter.setRowFilter(null);
					}
 
				}
			}
		};
 
		combobox.addItemListener(listener);
 
 
 
		maj.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				close();
				if (!majr.majScans(0, 1))
					new GestionAffichageLu();
			}
		});
 
		table.setDefaultRenderer(Object.class, new MonCellRenderer());
 
 
		getContentPane().add(menu, BorderLayout.WEST);
		setVisible(true);
 
	}
 
 
 
	private void showPopup(MouseEvent e) {
		if (e.isPopupTrigger()) {
			Point p = new Point(e.getX(), e.getY());
 
			selectedRow = table.rowAtPoint(p); // recuperation de la ligne
			popupMenu.show(e.getComponent(), e.getX(), e.getY());
		}
	}
 
 
	/*** Menu clic droit : Mise à Jour *****/
	private class MAJDerniereLecture extends AbstractAction {
		private MAJDerniereLecture() {
			super("MAJDerniereLecture");
		}
 
		public void actionPerformed(ActionEvent e) {
 
			Object cellule = table.getValueAt(selectedRow, 0);
			new FormulaireMiseAJour(cellule.toString(), 1);
 
		}
	}
 
 
	/* affichage */
	class MonCellRenderer extends DefaultTableCellRenderer {
 
 
 
		@SuppressWarnings("static-access")
		public Component getTableCellRendererComponent(JTable table,
				Object value, boolean isSelected, boolean hasFocus, int row,
				int column) {
 
			Object valeurDernierChap = table.getModel().getValueAt(
					table.convertRowIndexToModel(row), 2);
 
			/* recuperation de l'etat de chaque cellule du tableau */
			Component cell = super.getTableCellRendererComponent(table, value,
					isSelected, hasFocus, row, column);
 
			/* application de la police "Courier New" et de fond "bold + italic" */
			cell.setFont(new Font("Courier New bold", Font.ITALIC, 15));
 
			Object valeur = table.getValueAt(row, 4);
 
			double val1 = 0;
			double val2 = 0;
 
			try {
				val1 = Double.parseDouble((String) valeurDernierChap);
				val2 = Double.parseDouble((String) valeur);
			} catch (Exception e) {
				// TODO: handle exception
			}
 
			String statusValue = null;
 
			con.connection();
 
			statusValue = con.recupStatut(table.getModel()
					.getValueAt(table.convertRowIndexToModel(row), 0)
					.toString());
			/*
			 * application de couleur sur cellule selon le contenu de la cellule
			 * *
			 */
 
			if (statusValue == null) {
				statusValue = "En Cours";
			} else if (statusValue.equals("Terminer")) {
				setBackground(Color.GRAY);
				if (val1 > val2) {
					if (column == 2) {
						setBackground(Color.GREEN);
					}
				}
 
			} else if (statusValue.equals("En Cours")) {
				setBackground(Color.CYAN);
 
				if (val1 > val2) {
					if (column == 2) {
						setBackground(Color.GREEN);
					}
				}
 
			} else if (valeur == null) {
				setBackground(Color.YELLOW);
			} else {
				setBackground(null);
			}
 
 
			return cell;
		}
 
 
	}
 
	@Override
	public void actionPerformed(ActionEvent arg0) {
		System.out
				.println("GestionAffichageLu : actionPerformed -> ***   Test appel méthode");
		table.setValueAt(form.getDernierScanLu(), selectedRow, 4);
 
	}
 
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		 System.out.println("GestionAffichageLu : setValueAt -> ***   Test méthode" );
     fireTableCellUpdated(selectedRow,4);
	}
 
	@Override
	public void tableChanged(TableModelEvent e) {
 
		int row = e.getFirstRow();
		int column = e.getColumn();
 
		System.out
				.println("GestionAffichageLu : TableChanged -> ***   Test méthode");
 
		TableModel model = (TableModel) e.getSource();
		String columnName = model.getColumnName(column);
		Object data = model.getValueAt(row, column);
 
		System.out
				.println("GestionAffichageLu : TableChanged -> ***   Test récuperation de donnée de la table : "
						+ data);
 
	}
 
}

Si l'un de vous a une idée de la cause de cette erreur et de la solution ( ou une piste ) je suis preneur

je vous remerci d'avance