Jpanel calendrier

Soyez le premier à donner votre avis sur cette source.

Vue 28 131 fois - Téléchargée 2 883 fois

Description

je soummet cette source rien que pour essayer de contribuer à ce site intéressant, si ça marche ,j'en soumetterais d'autres ;) biensur pa tres grosse :)

voilà lors d'un projet j'ai eu besoin d'un calendrier en bouttons don j'ai dû developper cette classe qui hérite d'un JPanel , reétulisable qui présente presque un calendrier mais quii marche mois par mois ///
les jour sont affichés sur des bouton donc il suffit d'ajoputer des procedure dans l'actionPerformed pour éditer un RDV ou consulter l'hisorique d'un audiot ou autre .. à vous de voir selon le besoin

Source / Exemple :


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

class Calendrier extends JPanel implements ActionListener{
	
	JPanel container;
	Vector btnVect = new Vector();
	SButton suiv;
	SButton prec;
	
	int x0,y0,mois,annee;//x0 et y0 sont les coordonnées pour setLocation
	
	Calendrier(int x0,int y0,int iMois,int iAnnee,JPanel container){
		super();
		this.container = container;
		this.x0  = x0;
		this.y0  = y0;
		this.mois  = iMois;
		this.annee  = iAnnee;
		container.setLayout(null);
		setOpaque(false); //si vous utiliser une image comme fond
		setBounds(x0,y0,420,360);
		setLayout(null);
		container.add(this);
		
		prec = new SButton("<<",100,0,50,28,true,this);		
		new SLabel(string(iMois)+" "+iAnnee,1,14,150,0,120,30,this);
		suiv = new SButton(">>",270,0,50,28,true,this);	
		prec.addActionListener(this);
		suiv.addActionListener(this);	
		new SLabel("Dim",1,12,0,30,60,30,this);
		new SLabel("Lun",1,12,60,30,60,30,this);
		new SLabel("Mar",1,12,120,30,60,30,this);
		new SLabel("Mer",1,12,180,30,60,30,this);
		new SLabel("Jeu",1,12,240,30,60,30,this);
		new SLabel("Ven",1,12,300,30,60,30,this);
		new SLabel("Sam",1,12,360,30,60,30,this);
		
		remplirVect();
		afficherGrille(iMois,iAnnee);
	}
	
	//procedure de remplissage du vecteur par des boutton standard
	public void remplirVect(){
		int ligne = 0;
		while (ligne<6){
			int colonne = 0;
			while( colonne<7){
				JButton btn = new JButton();
				btn.setBounds(colonne*60,(ligne*60)+60,60,60);
				btn.setVisible(false);
				btnVect.addElement(btn);
				colonne++;
			}
			ligne++;
		}
	}
	
	public void afficherGrille(int iMois,int iAnnee){
		for (int i = jour(iAnnee,iMois,1);i<(jour(iAnnee,iMois,1)+nbreJour(iMois,iAnnee));i++){
			JButton b = new JButton();
			b = (JButton)btnVect.elementAt(i-1);
			b.setVisible(true);
			b.setLabel(new Integer(i-jour(iAnnee,iMois,1)+1).toString());
			add(b);
			b.addActionListener(this);
		}			
	}
		
	
	public int jour(int annee,int mois, int jour){
    	int retour = 0;
    	for(int i=1900;i<annee;i++)
    		if(i%4 == 0)retour+=366;
    		else retour+=365;
    	for(int i=1;i<mois;i++){
    		if((i==1)||(i==3)||(i==5)||(i==7)||(i==8)||(i==10)||(i==12))retour+=31;
    		if((i==4)||(i==6)||(i==9)||(i==11))retour+=30;
    		if((i==2)&&(annee%4==0))retour+=29;
    		if((i==2)&&(annee%4!=0))retour+=28;
    	}
    	for(int i=0;i<jour;i++)
    		retour+=1;
    	if(retour%7==0) retour = 7;
    	else retour = retour%7;
    	return (retour);
    }
    
    public String string(int i){
    	String retour = new String();
    	
    	switch(i){
    		case 1 : { retour ="Janvier";break; }
    		case 2 : { retour ="Février";break; }
    		case 3 : { retour ="Mars";break; }
    		case 4 : { retour ="Avril";break; }
    		case 5 : { retour ="Mai";break; }
    		case 6 : { retour ="Juin";break; }
    		case 7 : { retour ="Juillet";break; }
    		case 8 : { retour ="Aout";break; }
    		case 9 : { retour ="Septembre";break; }
    		case 10: { retour ="Octobre";break; }
    		case 11: { retour ="Novembre";break; }
    		case 12: { retour ="Décembre";break; }
    	}
    	return retour;
    }
    
    public int nbreJour(int mois,int annee){
    	int retour = 0;
    	
    	switch(mois){
    		case 1 : { retour = 31;break; }
    		case 2 : { 
    					if(annee%4 == 0) retour = 29;
    					else retour = 28;
    					break; }
    		case 3 : { retour =31;break; }
    		case 4 : { retour =30;break; }
    		case 5 : { retour =31;break; }
    		case 6 : { retour =30;break; }
    		case 7 : { retour =31;break; }
    		case 8 : { retour =31;break; }
    		case 9 : { retour =30;break; }
    		case 10: { retour =31;break; }
    		case 11: { retour =30;break; }
    		case 12: { retour =31;break; }
    	}
    	return retour;
    }
    
    public void actionPerformed(ActionEvent e){
    	if(e.getSource() == suiv){
    		container.removeAll();
    		int m,a;
    		if(mois==12){
    			m=1;
    			a=annee+1;}
    			else{
    				m=mois+1;
    				a=annee;}
    		container.add(new Calendrier(x0,y0,m,a,container));
    		container.repaint();
    	}
    	if(e.getSource() == prec){
    		container.removeAll();
    		int m,a;
    		if(mois==1){
    			m=12;
    			a=annee-1;}
    			else{
    				m=mois-1;
    				a=annee;}
    		container.add(new Calendrier(x0,y0,m,a,container));
    		repaint();
    	}
    }
    		
}

// les deux classes qui suivent font partie de ma bibliothèque de composants personélisée
// changer les si elles vous plaisent pa ;)

//****************************************************************/
//label personalisé
/****************************************************************/

class SLabel extends JLabel{
	     
     public SLabel(String label,int horizental,int taillePolice,int x0,int y0,int x,int y,JPanel contentPane){
	 	super(label);
	 	setFont(new java.awt.Font("Monospaced", 1, taillePolice));
        setBounds(x0,y0,x,y);
        if(horizental == 0)
        	setHorizontalAlignment(SwingConstants.LEFT);
        if(horizental == 1)
        	setHorizontalAlignment(SwingConstants.CENTER);
        if(horizental == 2)
        	setHorizontalAlignment(SwingConstants.RIGHT);
        contentPane.add(this);
        
     }
}

/****************************************************************/ 
// Boutons personalisé
/***************************************************************/

class SButton extends JButton{
	public SButton(String label,int x0,int y0,int x,int y,boolean visible,JPanel contentPane){
	 	super(label);
	 	setFont(new java.awt.Font("Monospaced", 1, 14));
        setBounds(x0,y0,x,y);
        setVisible(visible);
        setOpaque(false);
        contentPane.add(this);
     }
}

Conclusion :


je ne pense pas qu'il y a grand choz à expliquer , le code est simple mais utile seulement à mon avi
mais s'il y a des question ou des conseils pour m'amiliorer n'hésitez pas , et merci d'avance :)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

alex1er
Messages postés
39
Date d'inscription
jeudi 11 avril 2002
Statut
Membre
Dernière intervention
5 juin 2006
-
Il manque la classe Grille

@+
tncoder
Messages postés
5
Date d'inscription
mercredi 3 août 2005
Statut
Membre
Dernière intervention
13 septembre 2005
-
dslé , la classe grille n'est pas manquante
en fait cette meme classe s'appelait grille mais moi je l'ai changé avant de la publier donc il te suffit de remplacer le mot "Grille" par "Calendrier" dans tt le code et ça va marcher
sinon laisse un msg @+
XIIIOreiller
Messages postés
7
Date d'inscription
mercredi 12 novembre 2003
Statut
Membre
Dernière intervention
23 juillet 2007
-
Bon, je n'ai pas utilisé ton source mais par contre, je vais me permettre d'en faire une analyse rapide.

1) Un GROS défaut selon moi, l'utilisation de la méthode setBounds alors que ton calendrier héritant de JPanel, il sera positionné à l'aide du LayoutManager donc, les coordonnées seront calculées automatiquement

2) Quelques coquilles dans le code mais rien de bien grave (si tu veux que je t'en dise un peu plus, dis le moi, on ne va pas s'éterniser là dessus)

3) Une question me vient à l'esprit, pourquoi n'as tu pas utiliser certaines classes gérant la date??? Cela t'aurais éviter de faire du code pour rien (mais tu dois avoir tes raisons que je ne connais pas mai qui m'intéresse)

Voila, si tu veux que l'on discute plus longuement du comment rendre ton code plus propre (et donc plus exploitable), n'hésite pas demande moi, il n'y a pas de problème.
XIIIOreiller
Messages postés
7
Date d'inscription
mercredi 12 novembre 2003
Statut
Membre
Dernière intervention
23 juillet 2007
-
Je voulais juste rajouter que mes critiques ne sont pas là pour te décourager, au contraire, plus nombreux sont les avis, plus on a de chance de progresser. Libre à toi après de faire de la refonte de code si tu le souhaite.
EPS32HAY
Messages postés
100
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
1 février 2009
-
Salut,

Moi je connais pas grand chose en JAVA, mais je tiens à te remercier pour ce code qui va surement m'aider.

Bonne prog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (tncoder)