Bonjour,

Je suis encore novice en java et je n'arrive pas a comprendre mon erreur.

situation : J'ai une fenêtre avec 3 Jpanel (nord, centre, sud). Au Centre on trouve un calendrier, au nord un bouton qui "devrait" changer le calendrier pour passer au mois suivant et en bas l'indice Calendar du mois.

problème : Quand je clic sur le bouton le mois change mais l'affichage de l'indice Calendar et le calendrier lui même ne change pas. Mon problème vient surement d'une erreur de construction de mon code mais, je n'arrive pas à le résoudre.

mon 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
 
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.TimeZone;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
 
@SuppressWarnings("serial")
public class MonCalendrier2 extends JFrame
{
	//valeur jour, mois, annee, jour dans le mois
	int j, m,a,js,maxDay;
	//mois en cour (indice Calendar 0 à 11)
	int mois = 0;
 
	//mes elements
	JPanel contentPane, panBtnMois, panCalendrier;
	JButton btnNext;
	JLabel lblMois;
 
	//Calendrier
	Calendar cal;
 
	public static void main(String[] args)
	{
		MonCalendrier2 frame = new MonCalendrier2();
		frame.go();
 
	}
 
	public void go()
	{
		//option de la fenetre
		setSize(600,500);
		setTitle("Test fenetre");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(true);
 
		//creation des element et agencement
		contentPane = new JPanel();
		contentPane.setLayout(new BorderLayout());
		this.setContentPane(contentPane);
 
		panBtnMois = new JPanel();
		contentPane.add(panBtnMois, BorderLayout.NORTH);
 
		btnNext = new JButton("mois suivant");
		btnNext.addActionListener(new BoutonListeneur());
		panBtnMois.add(btnNext);
 
		panCalendrier = new JPanel();
		panCalendrier.setLayout(new GridLayout(6,5));
		panCalendrier.setBackground(Color.GREEN);
		contentPane.add(panCalendrier, BorderLayout.CENTER);
 
		//fonction qui crée et place les case des jours
		creationJour();
 
		lblMois = new JLabel(Integer.toString(mois));
		lblMois.setHorizontalAlignment(JLabel.CENTER);
		contentPane.add(lblMois, BorderLayout.SOUTH);
 
 
		//des print de control
		System.out.println(cal.getTime());
		System.out.println("Jour de al semaine: " + cal.get(Calendar.DAY_OF_WEEK));
		System.out.println("Jour: " + cal.get(Calendar.DAY_OF_MONTH));
		System.out.println("Mois: " + cal.get(Calendar.MONTH));
		System.out.println("Année: " + cal.get(Calendar.YEAR));
		System.out.println("jour dans le mois : " + maxDay);
 
		System.out.println(j + "-" + m + "-" + a);
 
		setVisible(true);
 
 
	}
 
	public void creationJour()
	{
 
		cal = Calendar.getInstance(TimeZone.getDefault());
		//choix du jour
		cal.set(Calendar.DAY_OF_MONTH, 1);
		//choix du mois
		cal.set(Calendar.MONTH, mois);
		//choix de l'annee
		cal.set(Calendar.YEAR,2014);
		//calcule du nbr de jour dans le mois choisi
		maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
 
		j = cal.get(Calendar.DAY_OF_MONTH);
		m = cal.get(Calendar.MONTH) + 1;
		a = cal.get(Calendar.YEAR);
		js = cal.get(Calendar.DAY_OF_WEEK)-1;
 
		//instanciation du tableau qui va contenir le calendrier 7 colone sur 6 ligne
		//42 cases jour et case vide comprise
		JPanel[] panJours = new JPanel[42];
		//premiere case jour etant le jour 1 du mois
		int numJour = 1;
 
		for(int i = 1; i<=42; i++)
		{
			//condition qui permet de mettre des case blanche aveant et apres quand le mois commance
			//un jour autre qu'un lundi et fini un jour autre que dimanche
			if(i >= js && i < js + maxDay)
			{
 
				JPanel panJour = new JPanel();
				String nom = Integer.toString(numJour);
				panJour.setBorder(new TitledBorder(null, nom, TitledBorder.LEADING, TitledBorder.TOP, null, null));
				panJours[i-1] = panJour;
				panCalendrier.add(panJour);
				numJour++;
			}
			else
			{
				JPanel panJour = new JPanel();
				panJours[i-1] = panJour;
				panCalendrier.add(panJour);
			}
		}
	}
 
	//listener du bouton
	class BoutonListeneur implements ActionListener
	{
		public void actionPerformed(ActionEvent arg0) {
 
			//quand on clic on passe au mois suivant grace à son indice Calendar 0 à 11
			if(mois < 11)
			{
				mois++;
				cal.set(Calendar.MONTH, mois);
			}
			else
			{
				mois = 0;
				cal.set(Calendar.MONTH, mois);
			}
			System.out.println(mois);
			System.out.println("Mois: " + cal.get(Calendar.MONTH));
 
			//PROBLEME aucune action visuelle sur la fenetre
			panCalendrier.repaint();
			panCalendrier.revalidate();
 
		}
	}
 
}
si vous avez ne serait-ce que des pistes merci d'avance.

Deaaz