Bonjour,
Petite question rapide :
J'ai un listener qui me permet d'ouvrir un calandrier (JCalandar), Comment faire pour qu'il n'en n'ouvre qu'un a la fois???
Merci
Version imprimable
Bonjour,
Petite question rapide :
J'ai un listener qui me permet d'ouvrir un calandrier (JCalandar), Comment faire pour qu'il n'en n'ouvre qu'un a la fois???
Merci
Conserver une référence dessus et la nullifier quand il est refermé et tester la référence est null ou pas avant d'en ouvrir un autre. Ou la même chose avec un boolean à true ou false...
C'est ce que j'avai esseyé de faire avec un boolean mais je n'arrive pas a savoir si la fenetre est active ou pas.
J'ai bien tenté isactive mais ca me renvoi toujour false.
et isShowing() ? Pas possible de mettre un WindowListener sur le dialog ou la fenêtre ?
je precise je suis sur netbeans
le listener est :
isShowing() marche bien mais le problem c'est que je ne voit pas trop comment lui dire lorsque la fenetre du calandrier est fermet il peu en ouvrir un autre...Code:
1
2
3
4
5
6
7 requExeDate.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { dateCalendar(evt); } });
peut etre que je devrai creer la frame dans le MouseListener, puis l'envoyer dans dateCalendar, pour ensuite tester son ouverture/fermeture
Bien sur ca ne peu pas marché vu que je recreer la frame a chaque foi que je clique dans la zone de la date...
je suppose que tu as utiliser un boolean tel que
après lors du fermeture de ton JClalender ( evenement closing )tu faitCode:
1
2
3
4
5
6
7
8
9
10
11 public void mouseClicked(java.awt.event.MouseEvent evt) { if(! calander_ouvert ) { ton_calender.sertVisible(true); calander_ouvert = true; } }
Code:
1
2calander_ouvert = false;
oui c'est plus ou moins ce que j'ai esseyé de faire
Mais le problem c'est que dans la fonction dateCalendar, je n'arrive pas a lui dire lorsque la fenetre ferme mettre " calendarOpen = true "Code:
1
2
3
4
5
6
7
8 requExeDate.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { JFrame frame = new JFrame("Calendar"); if(calendarOpen) dateCalendar(evt,frame); } });
Tu as parlé de "evenement closing" je ne voi pas trop pourrai tu developper STP
c'est quoi le role de cette méthode ?
...
tu as l'objet frame de type JFrame je suppose , alors tu lui associe un listener
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { // quand la fenêtre est entrain de se fermer mettre la varibale a false calander_ouvert = false; } } );
dateCalendar(evt,frame);
C'est la methode qui me permet de creer un calendrier en utilisant JCalandar. Ca m'ouvre une frame
Au faite ca marche mais pour cela il faut que je passe mon code sur Eclipse car avec netbeans une partie du code est bloqué (J'ai des interface que j'ai generé automatiquement avec netbeans)Code:
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 private void dateCalendar(java.awt.event.MouseEvent evt) { JFrame frame = new JFrame("Calendar"); frame.setIconImage(image); final JCalendar dateChooser = new JCalendar(); frame.add(dateChooser); frame.pack(); calendarOpen = false; // When click the textFiled // Initialize the date as today final Date date = dateChooser.getCalendar().getTime(); requExeDate.setText(new SimpleDateFormat("yyMMdd", Locale.ENGLISH).format(date)); // Locale locale = Locale.getDefault(); // DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.FRANCE); // Monitor the change of date property dateChooser.addPropertyChangeListener(new PropertyChangeListener() { //@Override public void propertyChange(PropertyChangeEvent e) { // get current year, month and day int year = dateChooser.getYearChooser().getYear(); int month = dateChooser.getMonthChooser().getMonth() + 1; int day = dateChooser.getDayChooser().getDay(); // make the new date in format of // year/month/day // this format is obligatoire. String sDate = new Integer(year).toString() + "/" + new Integer(month).toString() + "/" + new Integer(day).toString(); Date newDate = new Date(sDate); // set the new Date requExeDate.setText(new SimpleDateFormat("yyMMdd", Locale.ENGLISH).format(newDate)); } }); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { // quand la fenêtre est entrain de se fermer mettre la varibale a false calendarOpen = true; } } ); if (calendarOpen){ //frame.add(requExeDate, BorderLayout.WEST); frame.setLocationRelativeTo(null); // pour centrer frame.setVisible(true);} } }
j'ai rajouté ca dans le listener
Code:
1
2
3
4
5
6
7
8 requExeDate.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { JFrame frame = new JFrame("Calendar"); if (calendarOpen) dateCalendar(evt, frame); } });
evt a ete generer automatiquement par netbeant. (J'ai eut la flemme de l'enlevé)
Si non Ca marche maintenant aussi bien pour eclipse que pour Netbeans
Merci BeaucoupCode:
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 private void dateCalendar(java.awt.event.MouseEvent evt) { JFrame frame = new JFrame("Calendar"); //Si il n'y a pas de calendrier ouvert on continue if (calendarOpen) { frame.setIconImage(image); final JCalendar dateChooser = new JCalendar(); frame.add(dateChooser); frame.pack(); calendarOpen = false; // When click the textFiled // Initialize the date as today final Date date = dateChooser.getCalendar().getTime(); requExeDate.setText(new SimpleDateFormat("yyMMdd", Locale.ENGLISH).format(date)); // Locale locale = Locale.getDefault(); // DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.FRANCE); // Monitor the change of date property dateChooser.addPropertyChangeListener(new PropertyChangeListener() { //@Override public void propertyChange(PropertyChangeEvent e) { // get current year, month and day int year = dateChooser.getYearChooser().getYear(); int month = dateChooser.getMonthChooser().getMonth() + 1; int day = dateChooser.getDayChooser().getDay(); // make the new date in format of // year/month/day // this format is obligatoire. String sDate = new Integer(year).toString() + "/" + new Integer(month).toString() + "/" + new Integer(day).toString(); Date newDate = new Date(sDate); // set the new Date requExeDate.setText(new SimpleDateFormat("yyMMdd", Locale.ENGLISH).format(newDate)); } }); //frame.add(requExeDate, BorderLayout.WEST); frame.setLocationRelativeTo(null); // pour centrer frame.setVisible(true); } frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { // quand la fenêtre est entrain de se fermer mettre la varibale a false calendarOpen = true; } }); }
Tu ne préfère pas utiliser un JDialog modal plutot qu'une JFrame ?