Bonjour,

J'ai une JTable et quand je sélectionne une valeur dans un autre formulaire, je souhaite colorier la cellule avec la couleur associée à la valeur sauf qu'il ne se passe rien. J'ai juste réussi à mettre la valeur dans la cellule mais pas la colorier.

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
public class CalendrierTableModele extends AbstractTableModel {
 
    /**
         * serialVersionUID
         */
	private static final long serialVersionUID = 1L;
 
	/**
         * Attribut Calendrier calendrier
         */
    private Calendrier calendrier;
 
    private Calendar calendar;
	private final List<Seance> seances;
	private int semaine;
    /**
     * Constructeur
     * @param calendar
     * @param calendrier
     */
    public CalendrierTableModele(Calendar calendar, Calendrier calendrier, List<Seance> seances){
    	this.calendar = calendar;
    	this.calendrier = calendrier;
    	this.seances = seances;
    }
 
    /**
     * Méthode qui retourne le nombre de colonne
     * @return les 7 jours de la semaine
     */
    public int getColumnCount(){
        return 7;
    }
 
    /**
     * Méthode qui retourne le nombre de ligne 
     * @return les 2 lignes : matin et après-midi
     */
    public int getRowCount(){
    	return 2;
    }
 
    /**
     * Méthode qui retourne la valeur d'une cellule
     * @param row : index de la ligne
     * @param col : index de la colonne
     * @return Object
     */
    public Object getValueAt(int row, int col){
    	String chaine = null;
    	if(seances.size() != 0){
    		for(Seance uneSeance : seances){
    			if(uneSeance.getIndexColonne() == col && uneSeance.getIndexLigne() == row && uneSeance.getSemaine() == semaine){
    				chaine = uneSeance.toString();
    			}
    		}
        	switch(col){
        	case 0:
        		return chaine;
        	case 1:
        		return chaine;
        	case 2:
        		return chaine;
        	case 3:
        		return chaine;
        	case 4:
        		return chaine;
        	case 5:
        		return chaine;
        	case 6:
        		return chaine;
        	default:
        		return null;
            }
    	}else{
    		return "";
    	}
    }
 
 
    public Class getColumnClass(int col, int row){
    	String chaine = null;
    	if(seances.size() != 0){
    		for(Seance uneSeance : seances){
    			if(uneSeance.getIndexColonne() == col && uneSeance.getIndexLigne() == row && uneSeance.getSemaine() == semaine){
    				chaine = uneSeance.toString();
    			}
    		}
        	switch(col){
        	case 0:
        		return Color.class;
        	case 1:
        		return Color.class;
        	case 2:
        		return Color.class;
        	case 3:
        		return Color.class;
        	case 4:
        		return Color.class;
        	case 5:
        		return Color.class;
        	case 6:
        		return Color.class;
        	default:
        		return null;
            }
    	}else{
    		return null;
    	}
    }
 
 
    /**
     * Méthode qui permet de dire si une cellule est éditable ou non
     * @param row : index de ligne
     * @param col : index de la colonne
     * @return boolean
     */
    public boolean isCellEditable(int row, int col){
    	return false;
    }
 
 
 
    /**
     * Méthode qui retourne le nom d'une colonne
     * @param col : index de la colonne
     */
    public String getColumnName(int col) {
        return getDayName(col);
    }
 
    /**
     * Méthode qui retourne nom d'un jours en français
     * @param day
     * @return le libellé du jours
     */
    private String getDayName(int day) {
    	Calendar calendarDay = Calendar.getInstance();
    	calendarDay.setTime(calendar.getTime());
    	calendarDay.add(Calendar.DATE, day);
    	return calendarDay.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault())+" "+calendarDay.get(Calendar.DATE); // bug sur cette ligne calendar au lieu de calendarDay
    }
 
    /**
     * Accesseur en lecture
     * @return calendrier
     */
	public Calendrier getCalendrier() {
		return calendrier;
	}
 
	/**
         * Accesseur en écriture
         * @param calendrier
         */
	public void setCalendrier(Calendrier calendrier) {
		this.calendrier = calendrier;
	}
 
	/**
         * Accesseur en lecture
         * @return calendar
         */
	public Calendar getCalendar() {
		return calendar;
	}
 
	/**
         * Accesseur en écriture
         * @param calendar
         */
	public void setCalendar(Calendar calendar) {
		this.calendar = calendar;
	}
 
    public void addSeance(Seance seance) {
    	seances.add(seance);
    	//this.fireTableDataChanged();
    }
 
 
 
 
    public List<Seance> getSeances(){
    	return seances;
    }
 
	public int getSemaine() {
		return semaine;
	}
 
	public void setSemaine(int semaine) {
		this.semaine = semaine;
	}
}
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
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
public class Planning extends JFrame implements MouseListener, ActionListener, WindowListener{
 
    /**
         * serialVersionUID
         */
	private static final long serialVersionUID = 1L;
 
    private SemainePanel semainePanel;
    private JMenuBar barreMenu;
	private JMenu fichier;
	private JMenu edition;
	private JMenu formation;
	private JMenuItem sauvegarder;
	private JMenuItem fermer;
	private JMenuItem copier;
	private JMenuItem coller;
	private JMenuItem nouveauVierge;
	private JMenuItem nouveauFormation;
	private JMenuItem caracFormation;
    private JLabel semaineLabel;
    private JLabel caracFormationLabel;
    private JLabel nomFormationLabel;
    private JTable table;
    private JPanel panSouth;
    private JPanel panCalendrier;
    private JPanel panCaractFormation;
    private JPanel panPrincipal;
    private JFileChooser chooser;
	private Calendar calendar;
    private CalendrierTableModele tableModel;
    private CalendrierModele calendrierModele;
	private Annee uneAnnee;
	private metiers.Formation uneFormation;
	private List<metiers.Seance> seances;
	private File file;
	private int anneeSuivante = 0;
	private int semaine;
	private boolean reussi;
	/**
         * Constructeur
         * @param calendrier
         */
	public Planning(CalendrierModele calendrierModele, File file, List<metiers.Seance> seances) {
		this.calendrierModele = calendrierModele;
		this.file = file;
		this.seances = seances;
		seances = calendrierModele.getCalendrier().getSeances();
 
        if(calendrierModele.getCalendrier().getUneFormation() == null){
			uneFormation = new metiers.Formation();
			calendrierModele.getCalendrier().setUneFormation(uneFormation);
		}
 
		setTitle("Gestion d'emploir du temps");
        this.setLocationRelativeTo(null);
        //Adapte la fenêtre à la taille de l'écran
        this.setExtendedState(this.getExtendedState() | Planning.MAXIMIZED_BOTH);
 
        ajouterMenu();
 
    	uneAnnee = new Annee();
    	uneAnnee = calendrierModele.getCalendrier().getUneAnnee();
 
		calendar = calendrierModele.construireCalendrier(uneAnnee);
 
 
    	anneeSuivante = uneAnnee.anneeChoisit(uneAnnee)+1;
 
        semaine = getNumSemaine();
        tableModel = new CalendrierTableModele(calendar, calendrierModele.getCalendrier(), seances);
        tableModel.setSemaine(semaine);
        ajouterComposants();  
        getJoursOuvrable();
        this.setVisible(true);
        this.addWindowListener(this);
    }
 
	/**
         * Méthode qui permet d'ajouter la barre de menu à la vue
         */
	private void ajouterMenu(){
        barreMenu = new JMenuBar();
        fichier = new JMenu("Fichier");
        barreMenu.add(fichier);
        nouveauVierge = new JMenuItem("Nouveau planning vierge");
        fichier.add(nouveauVierge);
        nouveauVierge.addActionListener(this);
        nouveauFormation = new JMenuItem("Nouveau planning formation");
        fichier.add(nouveauFormation);
    	sauvegarder = new JMenuItem("Sauvegarder le planning");
    	fichier.add(sauvegarder);
    	sauvegarder.addActionListener(this);
    	fermer = new JMenuItem("Fermer");
    	fichier.add(fermer);
    	edition = new JMenu("Edition");
    	barreMenu.add(edition);
    	copier = new JMenuItem("Copier");
    	edition.add(copier);
    	coller = new JMenuItem("Coller");
    	edition.add(coller);
    	formation = new JMenu("Formation");
    	barreMenu.add(formation);
    	caracFormation = new JMenuItem("Caractéristiques d'une formation");
    	formation.add(caracFormation);
    	caracFormation.addActionListener(this);
 
    	setJMenuBar(barreMenu);
	}
 
	/**
         * Méthode qui ajoute les composants graphiques à la vue
         */
    private void ajouterComposants(){
 
    	//Label indiquant l'année de formation choisit
    	caracFormationLabel = new JLabel("Année : "+calendrierModele.getCalendrier().getUneAnnee().getAnnee()+ "-"+(anneeSuivante));
        caracFormationLabel.setFont(new Font(null, Font.BOLD, 20));
        if(calendrierModele.getCalendrier().getUneFormation().getNom() == null){
    		caracFormationLabel.setText("Année : "+calendrierModele.getCalendrier().getUneAnnee().getAnnee()+ "-"+(anneeSuivante));
        }else{
        	updateNomFormation(calendrierModele.getCalendrier().getUneFormation().getNom());
        }
 
        //Label contenant le nom de la formation
        nomFormationLabel = new JLabel();
        nomFormationLabel.setFont(new Font(null, Font.BOLD, 20));
 
        //Label qui affiche la semaine sur laquelle on est
        semaineLabel = new JLabel(getSemaineLabel());
        semaineLabel.setFont(new Font(null, Font.PLAIN, 18));
        semaineLabel.setVerticalAlignment(JLabel.CENTER);
        semaineLabel.setHorizontalAlignment(JLabel.CENTER);
 
        //Affichage du tableau, du calendrier
        table = new JTable((tableModel));
        table.getTableHeader().setBackground(Color.YELLOW);
        table.setRowHeight(200);
 
        //Empêche la sélection d'une colonne et d'une ligne entière
        table.setRowSelectionAllowed(false);
        table.setColumnSelectionAllowed(false);
        //Empêche le déplacement des colonne
        table.getTableHeader().setReorderingAllowed(false); 
        //Empêche de changer la taille des colonne
        table.getTableHeader().setResizingAllowed(false);
        JScrollPane tableScrollPane = new JScrollPane(table);
 
        table.setDefaultRenderer(Color.class, new CouleurModuleRenderer());
 
 
        //Panel du bas affichant les différentes semaines	
        semainePanel = new SemainePanel(this, calendar, calendrierModele);
        panSouth = new JPanel(new BorderLayout());
        panSouth.add(semainePanel, BorderLayout.SOUTH);
 
        /*
         * Panel contenant le libellé de la semaine et le tableau de la semaine choisit
         * le panel contenant la liste des semaine
         */
        panCalendrier = new JPanel(new BorderLayout());
        panCalendrier.setPreferredSize(new Dimension(1400, 600));
        panCalendrier.add(semaineLabel, BorderLayout.NORTH);
        panCalendrier.add(tableScrollPane, BorderLayout.CENTER);
        panCalendrier.add(panSouth, BorderLayout.SOUTH);
 
        //Panel contenant le libellé de l'année de foramation choisit
        panCaractFormation = new JPanel(new BorderLayout());
        panCaractFormation.add(caracFormationLabel, BorderLayout.WEST);
 
        //Panel principal contenant les autres panels
        panPrincipal = new JPanel(new BorderLayout());
        panPrincipal.add(panCaractFormation, BorderLayout.NORTH);
        panPrincipal.add(panCalendrier, BorderLayout.CENTER);
        this.add(panPrincipal);
        table.addMouseListener(this);
    }
 
    /**
     * Méthode qui donnes des caractéristiques à différents composants selon la selection
     * @param selection : semaine sélectionnée
     */
    public void setSemaine(Calendar selection){
    	calendar.setTime( selection.getTime());
            semaineLabel.setText(getSemaineLabel());
        	tableModel.fireTableStructureChanged(); 
        	semainePanel.updateSelection();
        	getJoursOuvrable();
        	semaine = getNumSemaine();
        	tableModel.setSemaine(semaine);
    }
 
    /**
     * Méthode qui retourne la semaine sur laquelle on se trouve
     * pour l'afficher dans le label semaineLabel
     * @return le libellé de la semaine 
     */
    private String getSemaineLabel(){
    	/* 
    	 * Création d'un nouveau calendar pour pas modifier le calendar 
    	 * qui sert pour savoir quelle semaine on affiche
    	*/
    	Calendar calendar = Calendar.getInstance();
 
    	/*
    	 * Recopie de la date actuellement mise dans le calendar 
    	 * qui sert pour savoir quelle semaine on affiche
    	 */
    	calendar.setTime(this.calendar.getTime()); 
    	//On récupère le numéro de la semaine
    	int semaine = calendar.get(Calendar.WEEK_OF_YEAR); 
 
        //Le premier jour de la semaine
    	Date premierJour = calendar.getTime();
    	int moisPremierJour = calendar.get(Calendar.MONTH);
 
        //Le dernier jour de la semaine
    	calendar.add(Calendar.WEEK_OF_YEAR, 1);
    	calendar.add(Calendar.DAY_OF_WEEK, -1);
    	Date dernierJour = calendar.getTime();
 
    	int moisDernierJour = calendar.get(Calendar.MONTH);
 
    	return SemainePanelModele.getSemaineLabel(semaine, premierJour, dernierJour, moisPremierJour, moisDernierJour); 
    }
 
	/**
         * Méthode qui gère les jours ouvrés
         */
	private void getJoursOuvrable(){
		PlanningRender mcr = new PlanningRender();
 
		if(calendrierModele.getCalendrier().getSamediOuvrable() == true){
			table.getColumnModel().getColumn(5).setCellRenderer(mcr);
		}
 
		if(calendrierModele.getCalendrier().getDimancheOuvrable() == true){
			table.getColumnModel().getColumn(6).setCellRenderer(mcr);
		}
	}
 
 
 
    public int getNumSemaine(){
    	/* 
    	 * Création d'un nouveau calendar pour pas modifier le calendar 
    	 * qui sert pour savoir quelle semaine on affiche
    	*/
    	Calendar calendar = Calendar.getInstance();
 
    	/*
    	 * Recopie de la date actuellement mise dans le calendar 
    	 * qui sert pour savoir quelle semaine on affiche
    	 */
    	calendar.setTime(this.calendar.getTime()); 
    	//On récupère le numéro de la semaine
    	int semaine = calendar.get(Calendar.WEEK_OF_YEAR); 
    	return semaine;
    }
 
 
 
 
 
 
 
 
 
 
 
	/**
         * Méthode appelée lors d'un double clic sur une cellule
         * Créer une classe module placer pour garder l'adresse de la cellule pour le module placé
         */
	public void mouseClicked(MouseEvent event) {
		if (event.getClickCount() == 2) {
			int indice_ligne=table.getSelectedRow();
			int indice_colonne=table.getSelectedColumn();
 
 
	    	/* 
	    	 * Création d'un nouveau calendar pour pas modifier le calendar 
	    	 * qui sert pour savoir quelle semaine on affiche
	    	*/
	    	Calendar calendar = Calendar.getInstance();
 
	    	/*
	    	 * Recopie de la date actuellement mise dans le calendar 
	    	 * qui sert pour savoir quelle semaine on affiche
	    	 */
	    	calendar.setTime(this.calendar.getTime()); 
	    	//On récupère le numéro de la semaine
	    	int semaine = calendar.get(Calendar.WEEK_OF_YEAR); 
 
			Seance seance = new Seance(calendrierModele.getCalendrier().getUneFormation().getModules(), indice_ligne, indice_colonne, semaine, tableModel, calendrierModele);
			seance.setVisible(true);
		}
	}
	public void mouseEntered(MouseEvent arg0) {}
	public void mouseExited(MouseEvent arg0) {}
	public void mousePressed(MouseEvent event) {}
	public void mouseReleased(MouseEvent arg0) {}
 
	/**
         * Méthode appelée lors d'un clic sur un item du menu
         */
	public void actionPerformed(ActionEvent event) {
		Object source = event.getSource();
		if(source == nouveauVierge){
			ChoixAnnee choixAnnee = new ChoixAnnee();
			choixAnnee.setVisible(true);
			this.dispose();
		}
 
		if(source == caracFormation){
			Formation formation = new Formation(this, calendrierModele);
			formation.setVisible(true);
		}
 
		if(source == sauvegarder){
			this.saveFichier(file);
		}
	}
 
	public void updateNomFormation(String nom){
		float dureeTotalHeure = calendrierModele.dureeNbHeureFormation();
		float dureeTotalJours = calendrierModele.dureeJoursFormation(calendar);
		caracFormationLabel.setText("Année : "+calendrierModele.getCalendrier().getUneAnnee().getAnnee()+ "-"+(anneeSuivante)+"                 Formation : "+nom+"            Durée Jour : "+dureeTotalJours+" jours                    Durée Heure : "+dureeTotalHeure+" heures");
	}
 
	public void windowActivated(WindowEvent arg0) {}
	public void windowClosed(WindowEvent arg0) {}
	public void windowClosing(WindowEvent arg0) {
        int option = JOptionPane.showConfirmDialog(null, "Voulez-vous enregistrer les modifications apportées ?", "Fermeture du planning", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
 
        if(option != JOptionPane.NO_OPTION && 
        		option != JOptionPane.CANCEL_OPTION && 
        		option != JOptionPane.CLOSED_OPTION){
 
        	this.saveFichier(file);
        	System.exit(0);
        }else{
        	System.exit(0);
        }
	}
	public void windowDeactivated(WindowEvent arg0) {}
	public void windowDeiconified(WindowEvent arg0) {}
	public void windowIconified(WindowEvent arg0) {}
	public void windowOpened(WindowEvent arg0) {}
 
	public void confirmFichier(boolean reussi){
		if(reussi == true){
			JOptionPane.showMessageDialog(this,"Les modifications ont été enregistrées avec succès !", "Information", JOptionPane.INFORMATION_MESSAGE);						
		}else{
			JOptionPane.showMessageDialog(this,"Une erreur inconnue est survenu lors de l'enregistrement du fichier !", "Erreur", JOptionPane.ERROR_MESSAGE);
		}
	}
 
	public void saveFichier(File file){
		if(file == null){
			chooser = new JFileChooser();
			chooser.setCurrentDirectory(new File("/Documents"));
	        File filePropose = new File("Planning_"+uneAnnee.getAnnee()+"_"+anneeSuivante+".dat");
	        chooser.setSelectedFile(filePropose);
 
	        int retrival = chooser.showSaveDialog(null);
	        if (retrival == JFileChooser.APPROVE_OPTION) {
	        	file = (chooser.getSelectedFile());
	        	reussi = calendrierModele.saveFichier(file);
	        	confirmFichier(reussi);
	        	this.file = file;
	        }
		}else{
			reussi = calendrierModele.saveFichier(file);
			confirmFichier(reussi);
		}
	}
}
Merci de votre aide.