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

 Java Discussion :

Saisie Date dans un JTable


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 47
    Par défaut Saisie Date dans un JTable
    bonjour
    j'ai dans un JTable une colonne de type Date dont l'utilisateur peut saisir la date.....bref
    pour le contrôle de la saisie avant l'enregistrement j'ai fait ça :
    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
     
    if ((column == 6)&& row != -1)
    {
    TableModel model = (TableModel) e.getSource();
    Object data = model.getValueAt(row, column);
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    //pour verifier si une date est correcte
    df.setLenient(false);
    Date today = null;
    try {
     today = df.parse(String.valueOf(data));
     
    } 
    catch (ParseException ff) 
    {
     JOptionPane.showMessageDialog(null, "Veuillez entrer une Date correcte au format dd/mm/yyyy", "Information", JOptionPane.INFORMATION_MESSAGE);
    modeleArticle.setValueAt("01/01/1900", row, column);
     }
    }
    il reste juste un cas :
    quand le User tape dd/mm/11 je veux la transformer en dd/mm/2011
    merci de votre aide

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 74
    Par défaut
    String.valueOf(data) te retourne la date sous forme d'une String;

    Tu peux utiliser la fonction split() afin de parcourir la chaîne de caractères.

    String tmp = String.valueOf(data);
    String [] array = tmp.split("/");

    Dans le tableau array, il y aura les éléments découpés :
    - date
    - mois
    - année

  3. #3
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 47
    Par défaut
    Citation Envoyé par radium Voir le message
    String.valueOf(data) te retourne la date sous forme d'une String;

    Tu peux utiliser la fonction split() afin de parcourir la chaîne de caractères.

    String tmp = String.valueOf(data);
    String [] array = tmp.split("/");

    Dans le tableau array, il y aura les éléments découpés :
    - date
    - mois
    - année
    donc si j'ai bien compris après le découpage si année se compose de deux nombre j'ajoute 20 vers la gauche et je reformule date c ça?

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par farouk1301 Voir le message
    donc si j'ai bien compris après le découpage si année se compose de deux nombre j'ajoute 20 vers la gauche et je reformule date c ça?
    Non n'utilise pas ça, reprends plutôt ton idée de départ avec le SimpleDateFormat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String sFormat = "dd/MM/yy";
    SimpleDateFormat sdf = new SimpleDateFormat(sFormat);
    Date date = sdf.parse(sDate);
    Comme ça tu tentes ton parse "dd/MM/yyyy" et quand ça marche pas, tu tentes ton autre. Comme ça au final tu as un objet Date facilement réutilisable (le prolongement de ce que tu as fais en fait). La solution du split() c'est assez dégueulasse. Le SimpleDateFormat est là pour ça.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  5. #5
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 47
    Par défaut
    c'est la mon problème..dans la vérification....
    parcque quand j'essaie de Parser une date par exemple 30/09/11 avec le format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SimpleDateFormat("dd/MM/yyyy")
    il me donne 30/09/0011 et continue son traitement.....

  6. #6
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par farouk1301 Voir le message
    c'est la mon problème..dans la vérification....
    parcque quand j'essaie de Parser une date par exemple 30/09/11 avec le format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SimpleDateFormat("dd/MM/yyyy")
    il me donne 30/09/0011 et continue son traitement.....
    Et si tu essayes le parse SimpleFateFormat("dd/MM/yy") en premier puis le SimpleDateFormat("dd/MM/yyyy") ensuite si le précédent ne fonctionne pas ?
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  7. #7
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 47
    Par défaut
    Citation Envoyé par Robin56 Voir le message
    Et si tu essayes le parse SimpleFateFormat("dd/MM/yy") en premier puis le SimpleDateFormat("dd/MM/yyyy") ensuite si le précédent ne fonctionne pas ?
    je l'ai déjà essayer et même chose .....
    je pense que je vais inclure un JCalendar dans ma cellule et c tout....
    dommage je voulais vraiment que l'utilisateur tape la date dans le JTable
    parce que un JCalendar pour chaque cellule de la ligne c'est un peut lourd (coté affichage bien sur)

  8. #8
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 47
    Par défaut
    merci pour vos réponse
    j'ai suivie ton avis et j'ai caster ma Date en String ensuite découpage avec SPLIT pour gérer les années en ajoutant 2000 si elle inférieur a 100 mais la un petit problème si le User tape 99 en voulant 1999 et ne pas 2099 bref j'ai changé l'idée de donner au User la possibilité d'écrire et j'ai utilisé un JDateChooser()
    pour ceux qui sont intéressés voici comment inclure JDateChooser() dans une cellule JTable
    dans mon JPanel qui contient mon JTable j'appel la classe CellDateEditor
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.tableauArticle.getColumn("Date Achat").setCellEditor(new CellDateEditor());
    et voici ma classe CellDateEditor
    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
     
    package com.anabib;
    import java.awt.Component;
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
     
    import javax.swing.AbstractCellEditor;
    import javax.swing.JTable;
    import javax.swing.table.TableCellEditor;
     
    import com.toedter.calendar.JDateChooser;
    import com.toedter.calendar.JTextFieldDateEditor;
     
    public class CellDateEditor extends AbstractCellEditor implements TableCellEditor{
     
    /**
             * 
             */
    	private static final long serialVersionUID = 1L;
    private JDateChooser dateChooser;
     
     static String ff ;
     
    public CellDateEditor() 
    	{
    		dateChooser= new JDateChooser();
    		JTextFieldDateEditor text =(JTextFieldDateEditor)dateChooser.getDateEditor().getUiComponent();
    		text.setEditable(false);
    	}
     
     
    	//Implement the one CellEditor method that AbstractCellEditor doesn't.
    	public Object getCellEditorValue() 
    	{
    		//SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy");
    		if(dateChooser.getDate()!=null)
    		{
    			String farouk = new SimpleDateFormat("dd/MM/yyyy", Locale.FRENCH).format(dateChooser.getDate());
    			//System.out.println("la date affiche est   :  "+farouk+"\n");
     
    		return farouk;
    		}
    		else
    		{
                     //la si le user ne choisie pas une date je retourne la valeur qui été avant
    		return ff;
    		}
    	}
     
     
    	public Component getTableCellEditorComponent(JTable table,Object value,boolean isSelected,int row,	int column) 
    	{
    		//pour selectionner la valeur avant son changement
    		 ff = (String) table.getValueAt(row, column);
    		//System.out.println(ff);
    		return dateChooser;
    	}
     
     
     
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] [VBA] Format de saisie DATE dans TextBox
    Par Teh Metil dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/12/2010, 11h05
  2. L'affichage d'une date dans un Jtable
    Par zéro_un dans le forum Général Java
    Réponses: 2
    Dernier message: 01/06/2010, 20h30
  3. controler une saisie date dans un formulaire
    Par lepieux dans le forum Langage
    Réponses: 2
    Dernier message: 15/05/2010, 00h02
  4. Masque de saisie date dans textbox
    Par akmer dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/08/2008, 13h15

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