Bonjour,

J'ai une JTable et je souhaiterai faire deux actions selon la checkbox cochée : colorier la colonne et rendre les cellules non modifiable de la colonne en question

Si samedi est cochée, je colorie samedi, si dimanche est cochée, je colorie dimanche.

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
public class CalendarWeekViewer extends JFrame implements ActionListener, ItemListener {
 
    /**
         * serialVersionUID
         */
	private static final long serialVersionUID = 1L;
	Calendar calendar;
    DateFormat dateFormatter;
 
    CalendarWeekTableModel tableModel;
 
    JLabel monthLabel, yearLabel;
    JTable table;
    int anneeChoisit;
    int anneeActuelle;
    int anneeDefinitif = 0;
    private WeekPanel weekPanel;
	private JCheckBox saturdayCheck;
	private JCheckBox sundayCheck;
    private JMenuBar barreMenu;
	private JMenu fichier, edition;
	private JMenuItem sauvegarder, fermer, copier, coller;
	private Serialiser serialise;
 
	public CalendarWeekViewer(String uneAnnee) {
		setTitle("Gestion d'emploir du temps");
		setSize(1400,800);
        this.setLocationRelativeTo(null);
        barreMenu = new JMenuBar();
        fichier = new JMenu("Fichier");
        barreMenu.add(fichier);
    	sauvegarder = new JMenuItem("Sauvegarder");
    	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);
 
    	setJMenuBar(barreMenu);
 
		Annee annee = new Annee();
		anneeChoisit = annee.anneeChoisit(uneAnnee);
 
        calendar = Calendar.getInstance();
		anneeActuelle = calendar.get(Calendar.YEAR);
		if(anneeActuelle < anneeChoisit){
			anneeDefinitif = anneeChoisit - anneeActuelle; 
			calendar.add(Calendar.YEAR, +anneeDefinitif);
		}else if(anneeActuelle > anneeChoisit){
			anneeDefinitif = anneeActuelle - anneeChoisit;
			calendar.add(Calendar.YEAR, -anneeDefinitif);
		}else{
			calendar.add(Calendar.YEAR, 0);
		}
 
        calendar.set(Calendar.MONTH,Calendar.SEPTEMBER); // on se positionne sur le mois de septembre (le début de notre liste de semaines)    	   
        calendar.set(Calendar.WEEK_OF_MONTH, 1); // on se positionne sur la première semaine du mois
        calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek()); // on se positionne sur le premier jour officiel
 
        dateFormatter = new SimpleDateFormat("MMMM yyyy");
        createComponents();
    }
 
    private void createComponents() {
    	JLabel holidays = new JLabel("Jours Non-ouvrés");
    	holidays.setFont(new Font(null, Font.BOLD, 12));
    	JPanel checkBox = new JPanel();
    	checkBox.add(holidays);
    	saturdayCheck = new JCheckBox("Samedi");
    	sundayCheck = new JCheckBox("Dimanche");
    	checkBox.add(saturdayCheck);
    	checkBox.add(sundayCheck);
 
    	saturdayCheck.addItemListener(this);
    	sundayCheck.addItemListener(this);
        yearLabel = new JLabel("Année : "+anneeChoisit+ "-"+(anneeChoisit+1));
        yearLabel.setFont(new Font(null, Font.BOLD, 20));
 
        monthLabel = new JLabel(getWeekLabel());
        monthLabel.setFont(new Font(null, Font.PLAIN, 18));
        monthLabel.setVerticalAlignment(JLabel.CENTER);
        monthLabel.setHorizontalAlignment(JLabel.CENTER);
 
        tableModel = new CalendarWeekTableModel(calendar);
        table = new JTable((TableModel)tableModel);
        table.setPreferredScrollableViewportSize(new Dimension(1400, 600));
        table.setRowHeight(200);
        TableColumnModel tableColumnModel = table.getColumnModel();
 
        for (int i=0; i < tableColumnModel.getColumnCount(); ++i) {
            TableColumn tableColumn = tableColumnModel.getColumn(i);
            tableColumn.setPreferredWidth(200);
        }
 
        JScrollPane tableScrollPane = new JScrollPane(table);
 
        JPanel southPanel = new JPanel(new BorderLayout()); // le panel intermédiaire
 
        // on créé le weekPanel	
        weekPanel = new WeekPanel(this, calendar, anneeActuelle, anneeChoisit);
        // on met le weekPanel dans le panel intermédiaire
        southPanel.add(weekPanel, BorderLayout.SOUTH);
        JPanel panneau1 = new JPanel(new BorderLayout());
        panneau1.setPreferredSize(new Dimension(1400, 600));
        panneau1.add(monthLabel, BorderLayout.NORTH);
        panneau1.add(tableScrollPane, BorderLayout.CENTER);
        panneau1.add(southPanel, BorderLayout.SOUTH);
        JPanel panneau3 = new JPanel(new BorderLayout());
        JPanel panneau2 = new JPanel(new BorderLayout());
        panneau2.add(yearLabel, BorderLayout.WEST);
        panneau2.add(checkBox, BorderLayout.EAST);
        panneau3.add(panneau2, BorderLayout.NORTH);
        panneau3.add(panneau1);
        this.add(panneau3);
    }
 
    public void setWeek(Calendar selection) {
    	calendar.setTime( selection.getTime());
            monthLabel.setText(getWeekLabel());
        	tableModel.fireTableStructureChanged(); 
        	weekPanel.updateSelection();
    }
 
    private String getWeekLabel() {
 
    	Calendar calendar = Calendar.getInstance(); // on créé un nouveau calendar pour pas modifier le calendar qui nous sert pour savoir quelle semaine on affiche
    	calendar.setTime(this.calendar.getTime()); // on recopie dedans la date actuellement mise dans le calendar qui ser pour savoir quelle semaine on affiche
 
    	int week = calendar.get(Calendar.WEEK_OF_YEAR); // on récupère le numéro de la semaine
 
        // le premier jour de cette semaine
    	Date premierJour = calendar.getTime();
    	int monthPremierJour = calendar.get(Calendar.MONTH); // bug ici (il y avait int monthPremierJour = calendar.get(Calendar.MONDAY); donc n'importe quoi)!!!
 
        // le dernier jour de cette semaine
    	calendar.add(Calendar.WEEK_OF_YEAR, 1);
    	calendar.add(Calendar.DAY_OF_WEEK, -1);
    	Date dernierJour = calendar.getTime();
 
    	int monthDernierJour = calendar.get(Calendar.MONTH);
 
    	return WeekPanel.getWeekLabel(week, premierJour, dernierJour, monthPremierJour, monthDernierJour); 
    }
 
	public void actionPerformed(ActionEvent event) {
		Object source = event.getSource();
 
		if(source.equals(sauvegarder)){
		    JFileChooser chooser = new JFileChooser();
		    chooser.setCurrentDirectory(new File("/Documents"));
		    int retrival = chooser.showSaveDialog(null);
		    if (retrival == JFileChooser.APPROVE_OPTION) {
		        try {
		            String fw = (chooser.getSelectedFile()+"_"+anneeChoisit+"_"+(anneeChoisit+1)+".dat");
		            serialise = new Serialiser(fw);
					serialise.serialiser(this);
		        } catch (Exception ex) {
		            ex.printStackTrace();
		        }
		    }		
		}
	}
 
	@Override
	public void itemStateChanged(ItemEvent event) {
		Object source = event.getSource();
		if (source.equals(saturdayCheck)) {
 
 
		}
 
		if (source.equals(sundayCheck)) {
 
		}
	}
}
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
public class CalendarWeekTableModel extends AbstractTableModel {
 
    /**
         * serialVersionUID
         */
	private static final long serialVersionUID = 1L;
 
	private Calendar calendar;
 
    private List<Journee> modeleJournee = new ArrayList<Journee>(); 
 
    public CalendarWeekTableModel(Calendar calendar) {
    	this.calendar = calendar;
    }
 
    public int getColumnCount() {
    	// ramene les 7 jours de la semaine
        return 7;
    }
 
    public int getRowCount() {
    	// ramene le nombre de ligne
    	// nombre de demi journée 
    	return 2;
    }
 
    public String getColumnName(int col) {
        return getDayName(col);
    }
 
    public Object getValueAt(int row, int col) {
    	return "";
    }
 
    public boolean isCellEditable(int row, int col) {
        	return true;
 
    }
 
    public void setValueAt(Object value, int row, int col) {
    	 Journee journee = modeleJournee.get(col);
    	 if(row ==0) {
    		 journee.getMatin().setLibelle(value.toString());    		 
    	 }
    	 if(row ==1) {
    		 journee.getApresmidi().setLibelle(value.toString());    		 
    	 } 
    }
 
    	  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
    		}
 
 
    protected void intialiserJournee() {
    	// initalisation de la journée 
    	for(int i =0; i<7; i++)
    	{
    		modeleJournee.add(new Journee());	
    	}
    }
}
Merci de votre aide