begin process at 2010 03 21 20:29:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date et Heure

 > CALENDRIER PERPÉTUEL (1900~4999 PARAMÉTRABLE)

CALENDRIER PERPÉTUEL (1900~4999 PARAMÉTRABLE)


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Date et Heure Niveau :Débutant Date de création :11/09/2004 Date de mise à jour :13/09/2004 18:00:11 Vu / téléchargé :21 066 / 1 769

Auteur : Jouj

Ecrire un message privé
Site perso
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Un simple calendrier...
A associé à d'autres prog... Peu servir pour différentes choses, personellement, je l'utilise pour un agenda ;)


 Conclusion

Je sais, étant donné que j'ai pas séparer les classes qui gèrent les évènements et tout, j'étais plus à ça près et j'aurais pu mettre le main à l'intérieur, ça aurait été plus simple sûrement :p mais bon c fait !
J'attend vos commentaires ;)
merci
++

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

13 septembre 2004 17:51:42 :
13 septembre 2004 18:00:12 :

 Sources du même auteur

Source avec Zip Source avec une capture LE COMPTE EST BON
Source avec Zip Source avec une capture AGENDA

 Sources de la même categorie

Source avec Zip CHRONOMETRE par didoux95
Source avec Zip CHRONOMETRE SEC + CENTIEMES par z bozzo
LES JOURS FERIES MOBILES DES ANNÉES À VENIR par yvkoe
Source avec Zip Source avec une capture COMMANDE "CAL" SOUS *UX par dje_jay
OBTENIR DATE ET HEURE par danimo

Commentaires et avis

Commentaire de gmi19oj19 le 11/09/2004 10:03:01

please, mets un zip.
ma connection est bonne, mais pense à ceux qui ont un  56k.
De plus, une capture d'écran serait la bienvenue.

Commentaire de GodConan le 11/09/2004 16:05:20

ouai le Zip qd meme  c est indispensable la.
20 lignes ca va mais pas plus sur la page....

Commentaire de Jouj le 13/09/2004 18:02:45

dsl, pour les 50 lignes de codes... :s
Je recommencerai plus c promis ;)

bye

+jouj+

Commentaire de GodConan le 13/09/2004 18:29:45

le screen ;o) apercu est pratik aussi  ;o) ca permet une premiere critique :
tu semble avoir utilisé un gridbaglayout pour placer t bouton

en fait une JTable me semble plus approprié pour ce type de presentation en elle ofre bcp de posibiliter de presentation

;o) Autrement l idee est bonne c vrai que ds le jdk les date sont asser penible a gerer et y a pas d API de base ;-(

Commentaire de Jouj le 13/09/2004 21:31:33

vi, bien vu, c'est effectivement un gridLayout...
Je vais me pencher sur la JTable pour la prochaine fois, merci pour le conseil :)

Commentaire de Vld le 25/04/2005 14:53:35

Impec, c'est bien fait et évolutif !

Cependant un léger bug chez moi, étant en avril 2005 le mois comporte effectivement 30 jours, en revanche lorsque je passe en mai, celui-ci n'en comporte que 30 aussi ... Le souci d'après moi vient du firstDayOfWeek, qui ne devrait pas être un lundi en mai mais bien un dimanche.

Une correction ?

A+

Commentaire de Vld le 25/04/2005 16:47:37

Bon j'ai débuggé ton code, et je me suis permis de le modifier quelque peu pour respecter quelques règles chères à mes yeux (encapsulation etc)

Enfin, un tout petit peu, et cela reste ton code.

Pour ceux qui veulent uniquement la solution, le problème est dans afficheCal, il faut ajouter

        if (firstDayOfWeek <= 0) {
            firstDayOfWeek = firstDayOfWeek + 7;
            }//EIF

juste avant la boucle for.

Un firstDayOfWeek de -1 (ça arrive lorsque le premier jour du mois est un dimanche) ne veut rien dire par la suite car il correspond au premier bouton remplit.

Bonne continuation et encore merci pour le script.


Commentaire de Vld le 02/05/2005 11:05:13

Autre bug, avec ton ItemListener quand tu changes de mois ou d'année dans la liste, tu recrées toute ton interface mais sans supprimer les composants d'avant (en l'occurence les boutons)

Du coup quand on clique sur un bouton cela appelle autant de fois l'action listener du bouton qu'on a changé de mois ou d'année dans tes listes.

Il faut faire un this.getContentPane().removeAll; pour remédier au problème.

Commentaire de niktoo le 11/05/2005 00:00:06

Vld salut!

je ne voi pas le  2eme bug dont tu parles..

où y a t-il des action listener sur les boutons??
et même je ne comprend pas comment cela résoud le problème de mettre this.getContentPane().removeAll();
cela va tout supprimer et il ne repasse pas par init() pour redessiner tout..
où le mets-tu??

merci de m'expliquer un peu @+ !!!

Commentaire de Vld le 11/05/2005 11:45:05

En fait moi j'ai restructuré son code, et les corrections que j'ai effectuées sont un peu loin déjà, désolé je serais incapable d'expliquer convenablement à moins que je replonge dedans ce que je ne peux pas, révisions oblige.

En revanche je vais copier l'integralité du code que moi j'utilise, comme ça vous pourrez voir où je veux en venir.
Si vous avez compris le sien, le mien devrait passer aussi.

Début du code :*******************************

import java.awt.*;
import java.awt.event.*;
import java.util.*;

import javax.swing.*;

public class Calendrier extends JFrame implements ItemListener, WindowListener, ActionListener {

    //attributs de classe
    private GregorianCalendar cal;
    private int firstDayOfWeek, nbDaysInMonth, year, month, begin,end=2020;
    private Choice monthSelect,ta;
    private JButton[] jours;
    private JButton jbDeco;

    public Calendrier() {
        
        super("Agenda");
        this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        this.addWindowListener(this);        
        cal = new GregorianCalendar();
        this.init();
        this.initCalendar(cal.get(Calendar.MONTH),cal.get(Calendar.YEAR));
        this.afficheCal();
    } //EOF

    private void init() {
        //construit un calendrier vierge
        cal = (GregorianCalendar) Calendar.getInstance();
        this.begin = cal.YEAR;
        //les bouttons surlesquels on affiche le numéro du jour
        jours = new JButton[42];
        this.setSize(640,480);
        this.setResizable(false);
        this.getContentPane().removeAll();
        this.getContentPane().setLayout(new GridLayout(8, 7));
        
        //mise en forme...
        for (int i = 0; i < 3; i++) {
            this.getContentPane().add(new JLabel(" "));
            } //EF
        
            monthSelect = new Choice();
            for (this.month = 0 ; this.month<12 ; this.month++){
                monthSelect.add(monthToString());
                } //EF
            this.month = cal.MONTH;
            this.year = cal.YEAR;
            //Menu déroulant permettant de choisir le mois à afficher
            monthSelect.select(month);
            monthSelect.addItemListener(this);
        this.getContentPane().add(monthSelect);
        //Menu déroulant permettant d'afficher l'année à afficher
            ta = new Choice();
            for (int y=begin ; y<end ; y++){
                ta.add(y+"");
                } //EF
            ta.select(this.year+"");
            ta.addItemListener(this);
        this.getContentPane().add(ta);
        this.getContentPane().add(new JLabel(" "));
            this.jbDeco = new JButton("Déconnecter");
            this.jbDeco.setFont(new Font("arial",0,9));
            this.jbDeco.addActionListener(this);
        this.getContentPane().add(this.jbDeco);
        //affiche les jours de la semaine
        this.getContentPane().add(new JLabel("Lundi",JLabel.CENTER));
        this.getContentPane().add(new JLabel("Mardi",JLabel.CENTER));
        this.getContentPane().add(new JLabel("Mercredi",JLabel.CENTER));
        this.getContentPane().add(new JLabel("Jeudi",JLabel.CENTER));
        this.getContentPane().add(new JLabel("Vendredi",JLabel.CENTER));
        this.getContentPane().add(new JLabel("Samedi",JLabel.CENTER));
        this.getContentPane().add(new JLabel("Dimanche",JLabel.CENTER));
        //Créé les différents bouttons et les ajoute à la fenêtre
        for (int i=0;i<42;i++){
            jours[i] = new JButton(" ");
            this.getContentPane().add(jours[i]);
            } //EF
    } //EOF

    /**
     *
     * Cette méthode renvoie le nom du mois correspondant à month + 1
     * ex: pour month = 0 -> cette fonction renvoie janvier
     *
     */
    public String monthToString() {
        String mois;
        switch (this.month) {
            case Calendar.JANUARY :
                mois = "Janvier";break;
            case Calendar.FEBRUARY :
                mois = "Février";break;
            case Calendar.MARCH :
                mois = "Mars";break;
            case Calendar.APRIL :
                mois = "Avril";break;
            case Calendar.MAY :
                mois = "Mai";break;
            case Calendar.JUNE :
                mois = "Juin";break;
            case Calendar.JULY :
                mois = "Juillet";break;
            case Calendar.AUGUST :
                mois = "Août";break;
            case Calendar.SEPTEMBER :
                mois = "Septembre";break;
            case Calendar.OCTOBER :
                mois = "Octobre";break;
            case Calendar.NOVEMBER :
                mois = "Novembre";break;
            case Calendar.DECEMBER :
                mois = "Décembre";break;
            default :
                mois = "erreur";
        }
        return mois;
    } //EOF

    /**
     * Cette méthode effectue les calculs principaux pour placer les jours
     * du mois au bon en droit dans le tableau
     * @param month, le mois à afficher
     * @param year, l'année à afficher
     */
    public void initCalendar(int mois, int annee) {
        
        this.setName("Calendrier");
        
        // paramètre le calendrier pour afficher selon ces 2 args
        //les valeurs firstDayOfWeek, nbDaysInMonth, year, month sont paramétrées ici
        cal = (GregorianCalendar) Calendar.getInstance();
        Date today = cal.getTime();
        
        //year & month :
            this.year = annee;
            this.month = mois; // 0-11 ; 11 = décembre
                
        //firstDayOfWeek :
            //jour de la semaine & mois d'aujourd'hui (1 = dimanche)
            int jourSemaine = cal.get(Calendar.DAY_OF_WEEK);
            int jourMois = cal.get(Calendar.DAY_OF_MONTH);
        
            //Calendrier positionné au début du mois/année voulus et timestamp correspondant
            cal.set(year, mois, 1);
            Date dday = cal.getTime();
        
            //calcul du nombre de secondes entre les deux dates
            long nbs = (long) Math.round((dday.getTime() - today.getTime())/1000);
            //calcul du nombre de jour entre les deux dates
            int nbDays = (int) Math.round(nbs / 86400);
            int nbDay = nbDays % 7; // modulo
            jourSemaine = jourSemaine + nbDay;
            //calcul du jour le semaine de la date rechercher
            if (jourSemaine <= 0) {
                this.firstDayOfWeek = jourSemaine + 7;
                } else if (jourSemaine > 7) {
                    this.firstDayOfWeek = jourSemaine - 7;
                    } else {
                    this.firstDayOfWeek = jourSemaine;
                    } //EIF
            
        //nbDaysInMonth :
            if (mois == Calendar.FEBRUARY) {
                if (cal.isLeapYear(year)) {
                    this.nbDaysInMonth = 29;
                    } else {
                    this.nbDaysInMonth = 28;
                    }//EIF
                } else if (mois
                        == Calendar.JANUARY | month
                        == Calendar.MARCH | month
                        == Calendar.MAY | month
                        == Calendar.JULY | month
                        == Calendar.AUGUST | month
                        == Calendar.OCTOBER | month
                        == Calendar.DECEMBER) {
                        this.nbDaysInMonth = 31;
                        } else {
                        this.nbDaysInMonth = 30;
                        } //EIF
            
        //on a tout pour l'afficher, restauration du calendrier
        cal = (GregorianCalendar) Calendar.getInstance();
    } //EOF

    private void afficheCal() {
        //on sélectionne par défaut le mois et l'année qu'on affiche
        ta.select(this.year+"");
        monthSelect.select(this.month);
        //j correspond au numéro du jour à afficher
        int j = 1;
        //le "-2" vient du fait que le jour 1 correspond au dimanche, et que le tableau a 0 comme indice de départ
        int firstButton = this.firstDayOfWeek-2;
        if (firstButton <= 0) {
            firstButton = firstButton + 7;
            }//EIF
        for (int k=0;k<42;k++){
            if ((k >= firstButton) && (k < (nbDaysInMonth + firstButton))) {
                //il faut afficher le numéro du jour
                jours[k].addActionListener(this);              
                jours[k].setText(j + "");
                jours[k].setFont(new Font("Serif",Font.ITALIC,10));
                if ((this.year == cal.get(Calendar.YEAR)) && (this.month == cal.get(Calendar.MONTH)) && (j == cal.get(Calendar.DATE))) {
                    //le jour à afficher est le jour d'aujourd'hui
                    jours[k].setFont(new Font("Arial",Font.BOLD,26));
                    } //EIF
                j++;
                } else {
                jours[k].setText("");
                } //EIF
            } //EF
    } //EOF
    
    public void itemStateChanged(ItemEvent arg0) {
        //on affiche le nouveau calendrier
        int indexM = monthSelect.getSelectedIndex();
        int indexT = ta.getSelectedIndex()+this.begin;
        
        this.init();
        this.initCalendar(indexM,indexT);
        this.afficheCal();
    } //EOF
    
    public void windowClosing(WindowEvent arg0) {
        this.dispose();
    } //EOF
    
    public void actionPerformed(ActionEvent e) {
        //résultat d'un clic sur un des boutons
    } //EOF
    
    
    
    public void windowActivated(WindowEvent arg0) {    
    }
    public void windowClosed(WindowEvent arg0) {
    }
    public void windowDeactivated(WindowEvent arg0) {
    }
    public void windowDeiconified(WindowEvent arg0) {  
    }
    public void windowIconified(WindowEvent arg0) {
    }
    public void windowOpened(WindowEvent arg0) {
    }
} //EOC

Commentaire de fergan le 27/06/2005 18:32:20

il marche pas ton calendrier mais pas du tous :)
essay le premier jour de janvier 2005 il te dis ke c'est
un dimanche or c'est un samedi .....
a revoir koi et moi j'ai pas le temps

Commentaire de leguet007 le 04/12/2005 22:36:49

salut chers mis , je suis un débutant en domaine du programmation et j'ai besoin de vos conseillers , donc que quelqu'un me dis par quoi il recommandé de commencer step by step . merci à tous et bonne continuation .

Commentaire de leguet007 le 05/12/2005 02:27:07

salut chers mis , je suis un débutant en domaine du programmation et j'ai besoin de vos conseillers , donc que quelqu'un me dis par quoi il recommandé de commencer step by step . merci à tous et bonne continuation .

Commentaire de vincjava le 23/04/2006 13:51:49

Salut Jouj !

J'avais un petit détail à ajouter. Dans cette classe, il y a pour chaque mois certains boutons vides sur lesquels on peut cliquer. Il serait intéressant de les désactiver, surtout qu'il ne faut ajouter que deux lignes de code :
_______________________________________________
Dans la méthode afficheCal()

  Après la boucle   for (int k=0;k<42;k++){
        
  Ajouter:          jours[k].setEnabled(false);
        
  Après la boucle   if ((k >= firstDayOfWeek) && (k <
                    (nbDaysInMonth + firstDayOfWeek))) {

  Ajouter:          jours[k].setEnabled(true);
            
+++

Commentaire de bnreb10 le 30/06/2006 09:27:12

Trés bon code, je l'ai réutilisé et compris trés facilement.
Encore merci.

Commentaire de kgadhi le 08/11/2006 14:02:21

Bonjour tous le monde,

Le code est tres bon, et il marche.
Mais j'ai un petit soucis, j'aurais besoin de recuperer la date de la case sur laquelle on clique, et je ne sais pas comment faire.

Merci de votre aide.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales