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

Composants Java Discussion :

Format du date dans un JXtable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut Format du date dans un JXtable
    Salut
    J'utilise JXtable de swingx
    J'ai des colonnes de type date et jeveut formater la valeur de ces colonnes.
    j'ai surchargé le render:
    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
     
    public class DateTimeCellRenderer extends DefaultTableCellRenderer {
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	final static DateFormat format = DateFormat.getDateInstance(
    			DateFormat.FULL, Locale.FRANCE);
     
    	public DateTimeCellRenderer() {
    		super();
    	}
     
    	@Override
    	public void setValue(Object value) {
    		// Date date = (Date) value;
    		setText((value == null) ? "" : format.format(value));
     
    	}
    }
    et je l'ai affecté à ma table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    historiqueDossierJXTable.setDefaultRenderer(java.util.Date.class, new DateTimeCellRenderer());
    mais la format du date ne change pas!
    comment faire?

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    As-tu vérifier que ton renderer est bien utilisé ?
    Ton modèle déclare bien le bon type pour ta colonne Date ?

    a++

  3. #3
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    As-tu vérifier que ton renderer est bien utilisé ?
    Ton modèle déclare bien le bon type pour ta colonne Date ?

    a++
    Salut adiGuba
    j'ai constaté que le renderer n'est pas appelé,j'ai modifé l'appel au render comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    historiqueDossierJXTable.setDefaultRenderer(Object.class, new DateTimeCellRenderer());
    et j'ai changé la methode setValueAt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (value instanceof Date) {
    			Date date = (Date) value;
    			System.out.println("value=" + value);
    			setText((value == null) ? "" : format.format(value));
    		}
    ET là une bizarre resultat:tous les cellules possédent une valeur DATE(le format de la date est celle que j'ai définit)!!!
    Est ce que tu ppeus m'aider à résoudre ce probléme?

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Pour définir un renderer tu as deux solutions :

    • Soit tu associes le renderer avec un type spécifique (comme tu as fait), mais dans ce cas il faut que ton modèle retourne le bon type via la méthode getColumnClass() (ce qui n'est pas le cas par défaut).
    • Soit tu associes le renderer à une colonne spécifique :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      table.getColumnModel().getColumn(xxx).setCellRenderer(new DateTimeCellRenderer())


    Citation Envoyé par riadhhwajdii Voir le message
    j'ai constaté que le renderer n'est pas appelé,j'ai modifé l'appel au render comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    historiqueDossierJXTable.setDefaultRenderer(Object.class, new DateTimeCellRenderer());
    Ce n'est pas top car tu utiliseras le renderer pour toutes les cellules...

    Citation Envoyé par riadhhwajdii Voir le message
    ET là une bizarre resultat:tous les cellules possédent une valeur DATE(le format de la date est celle que j'ai définit)!!!
    Il faudrait voir le code complet de ton setValue(), mais je suppose qu'il n'y a pas de "else" avec une valeur par défaut...

    comme c'est le même renderer qui est utilisé, tu conserves la valeur de la précédente cellule de type "Date"


    Il est préférable de limiter le renderer aux bonnes cellules par une des manières indiqué plus haut...


    a++

  5. #5
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    686
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 686
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Pour définir un renderer tu as deux solutions :

    [list][*] Soit tu associes le renderer avec un type spécifique (comme tu as fait), mais dans ce cas il faut que ton modèle retourne le bon type via la méthode getColumnClass() (ce qui n'est pas le cas par défaut).
    [*] Soit tu associes le renderer à une colonne spécifique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.getColumnModel().getColumn(xxx).setCellRenderer(new DateTimeCellRenderer())

    Ce n'est pas top car tu utiliseras le renderer pour toutes les cellules...


    Il faudrait voir le code complet de ton setValue(), mais je suppose qu'il n'y a pas de "else" avec une valeur par défaut...

    comme c'est le même renderer qui est utilisé, tu conserves la valeur de la précédente cellule de type "Date"


    Il est préférable de limiter le renderer aux bonnes cellules par une des manières indiqué plus haut...


    a++
    Merci adiGuba,
    pour l'association d'un renderer à une colonne spécifique, je ne suis pas trés convaincu car si je cache certaines colonnes(maXTable.getColumnExt(index).setVisible(false)),il yaura un grand conflit dans les index des colonnes, en plus je ne veut pas parcourir tous les colonnes concernées pour appliquer le render.
    Pour cela je veut utiliser le premier cas,voici ma classe render:
    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
     
    public class DateTimeCellRenderer extends DefaultTableCellRenderer {
    /**
         * 
    */
    private static final long serialVersionUID = 1L;
    final static DateFormat format = DateFormat.getDateTimeInstance(
    			DateFormat.FULL,DateFormat.FULL, Locale.FRANCE);
     
    	public DateTimeCellRenderer() {
    		super();
    	}
     
    	@Override
    	public void setValue(Object value) {
    		if (value instanceof Date) {
    			Date date = (Date) value;
    			System.out.println("value=" + value);
    			String dateValue=format.format(value).substring(0,format.format(value).indexOf("GMT"));
    			setText((value == null) ? "" : dateValue);
    		} else {
     
    			System.out.println("NO DATE=" + value);
    			try {
    				System.out.println("class=" + value.getClass());
    			} catch (Exception e) {
     
    			}
    			System.out
    					.println("****************************************");
    		}
     
    	}
    }
    autre chose, dans la doc de sun la methode setValue:
    Sets the <code>String</code> object for the cell being rendered to
    * <code>value</code>

Discussions similaires

  1. format de date dans SQL/serv 2000
    Par philo71 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/10/2005, 15h52
  2. comment imposer un format de date dans DB2?
    Par Mittou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/10/2005, 08h16
  3. [SQL 9i ] format de date dans un where
    Par booth dans le forum Oracle
    Réponses: 5
    Dernier message: 14/10/2005, 10h23
  4. [oracle][delphi] Problème format de date dans une requete
    Par le_parrain dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/07/2005, 10h12
  5. [VBA] Pb de format des dates dans un état
    Par linda15975 dans le forum IHM
    Réponses: 45
    Dernier message: 21/06/2005, 14h49

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