IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

remplir une table avec les jours du mois


Sujet :

Langage Java

  1. #1
    Inactif  
    Inscrit en
    Avril 2005
    Messages
    750
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 750
    Points : 498
    Points
    498
    Par défaut remplir une table avec les jours du mois
    Bonjour je voudrais réaliser un petit calendrier en java, j'utilise une JTable et j'étend AbstractTableModel pour la peuplé. Mon probleme est au niveau des méthode de la classe Calendar et GregorianCalendar pour avoir tous les jours du mois. Je redéfinie la méthode getValueAt de AbstractTableCalendar en retournant un tableau a 2 dimension int[][] lesJoursDuMois. J'arrive a remplir le tableau avec les jours du mois du 1er au 30 ou 31 mais comme le premier jour de la premiere semaine du mois ne commence pas forcément au 1er c'est qu'est mon probleme. Comment peuplé toutes les cellules du tableau si le premier jour de la premiere semaine du mois est le 26 du mois précédent par exemple. Quelqu'un pourrait il m'aider afin d'écrire une méthode public int[][] getData() me permettant d'avoir tous les jours de la premiere semaine du mois ainsi que tous les jours de la derniere semaine du mois. Merci pour votre aide.

  2. #2
    Membre averti Avatar de nicotine002
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 577
    Points : 409
    Points
    409
    Par défaut
    Bonsoir, ça m'a l'air d'être assez compliqué ton trucs

    Sinon essaie de regarder du coté de la lib SwingX, il y a un truc je crois qui te creer ton calendrier tout seul(JXCalendar si mes souvenirs sont bons).
    Pourquoi ca marche jamais?Vive le café!

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 124
    Points : 159
    Points
    159
    Par défaut
    Moi je pense que si un utilisateur décide de voir le mois X de l'année Y, je vais déjà chercher à savoir combien il y a de jours dans ce mois.
    Si c'est un mois "normal" la réponse sera 30 ou 31. Si c'est le mois de février, il faudra savoir si l'année est bissextile, il existe la fonction isLeapYear dans GregorianCalendar pour ça.

    Ensuite, il faut savoir à quel jour de la semaine correspond le 1er jour du mois en question. Il faut selon moi faire un truc style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Calendar calendar = new GregorianCalendar(...); //initialisé avec la date correspondant au 1er du mois
    calendar.get(Calendar.DAY_OF_WEEK);
    Le get va te retourner un entier entre 1 (dimanche) et 7(samedi). A présent tu sais donc par exemple que ton mois compte 30 jours et qu'il commence un mardi. Tu peux donc remplir ton tableau en mémoire.

    Le plus simple je suppose c'est de faire un tableau de 5 lignes (nombre de semaines maximum) et avec 7 colonnes (nombre de jours).

    Si ton mois commence par un mardi alors tu commences à peupler ton tableau à partir de la position [0][1], si il commence un dimanche, ce sera [0][6].

    Lors de l'affichage de ton tableau, il faudra repérer le début de tes valeurs, tu peux donc commencer par tout mettre à -1 avant de le peupler. Ensuite tu sais que le jour à afficher dépend du second indice. 0 = lundi, 1 = mardi, 2 = mercredi, ..., 6 = dimanche.

    Ca donne 2 boucles imbriquées dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String[] joursemaine = {"lundi","mardi",...};
     
    for(int semaine = 0; semaine < 5; semaine++){
       for(int jour = 0; jour < 7; jour++){
          if(tableau[semaine][jour]=!-1)
             System.out.println(joursemaine[jour] + tableau[semaine][jour])
      }
    }
    Je ne sais pas si c'est la meilleure solution mais ça devrait fonctionner.

    Bonne chance! (si jamais regardes le calendrier de Windows, tu vois qu'il commence aussi par des trous...)

  4. #4
    Inactif  
    Inscrit en
    Avril 2005
    Messages
    750
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 750
    Points : 498
    Points
    498
    Par défaut
    Salut, y aurai pas une methode genial nous permettant de recuperer pour une semaine donnee la date des jours de cette semaine? Dsle j envoi le message d un cyber donc pas mon code sous les yeux, pour plus de precision dans mes questions...

  5. #5
    Membre habitué Avatar de BlackWood
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 167
    Points : 169
    Points
    169
    Par défaut
    Au cas où, tu trouveras peut-être ton bonheur ici :JCalendar.
    BlackWood
    Et comme apparemment, ça fait "class" dans une signature :
    , , , ,

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Points : 173
    Points
    173
    Par défaut
    c'est ca que tu veux ?

    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
          Calendar c = Calendar.getInstance();
          c.setLenient(false);
          int[][] data = new int[12][31];
     
          for (int mois = Calendar.JANUARY; mois <= Calendar.DECEMBER; mois ++) {
             c.set(Calendar.MONTH, mois); 
             for (int jour = 1; jour < 32; jour ++) {
                c.set(Calendar.DAY_OF_MONTH, jour);
                try {
                   data[mois][jour-1] = c.get(Calendar.DAY_OF_WEEK);
                }
                catch (IllegalArgumentException e) {
                   data[mois][jour-1] = 0;
                }
             }
          }
     
     
          DateFormatSymbols dfs = new DateFormatSymbols();
          for (int jour = 0; jour < 31; jour ++) {
             for (int mois = 0; mois < 12; mois ++) {
                if (data[mois][jour] != 0)
                   System.out.print(dfs.getWeekdays()[data[mois][jour]] + "   \t");
                else 
                   System.out.print("         " + "\t");
             }
             System.out.println("");
     
          }

  7. #7
    Inactif  
    Inscrit en
    Avril 2005
    Messages
    750
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 750
    Points : 498
    Points
    498
    Par défaut
    Salut, je reviens sur ce problème avec mon code que voici :
    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
     
    public int[][] getData(int month)
    	{
    		calendrier.set(Calendar.DAY_OF_MONTH, 1);
    		int[][] leJour = new int[calendrier.getMaximum(Calendar.WEEK_OF_MONTH)][calendrier.getMaximum(Calendar.DAY_OF_WEEK)];
    		for(int i = 0; i < calendrier.getMaximum(Calendar.WEEK_OF_MONTH); i++)
    		{
    			for(int j = 0; j < calendrier.getMaximum(Calendar.DAY_OF_WEEK; j++)
    			{
    				leJour[i][j] = calendrier.get(Calendar.DAY_OF_MONTH;
    				jsCalendar.rollDay();
    			}
    		}
    		return leJour;
    	}
    Méthode getValueAt de la classe AbstractTableModel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public Object getValueAt(int row, int col)
    {
    return jourDuMois[row][col];
    }
    Constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public CalendarTableModel()
    {
    int[][] jourDuMois = getData(calendrier.get(Calendar.MONTH);
    }
    cela me renvoi bien tous les jours du mois mais si le premier jour du mois n'est pas un lundi je voudrais pouvoir afficher quelquechose comme ceci :
    28 29 30 1 2 3 4
    5 6 7 8 9 10 11....
    Merci.

Discussions similaires

  1. Remplir une table avec les données d'une base
    Par doc dans le forum Général Java
    Réponses: 2
    Dernier message: 25/06/2012, 00h48
  2. [MySQL] Remplir une table avec les données d'une autre table
    Par Souri84 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 26/11/2010, 19h41
  3. Remplir une table avec les données d'autres tables
    Par Beltegeuse dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/04/2008, 12h00
  4. comment creer une colonne avec les jours du mois
    Par Daniela dans le forum Access
    Réponses: 1
    Dernier message: 17/10/2006, 11h34
  5. Remplissage table avec les jours d'un mois
    Par tomtom25 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/05/2005, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo